Excel 嗅探、正则表达式和子字符串匹配



我有这段代码,它在目录中所有电子表格的"列"中搜索"短语",然后将匹配的日期、时间和位置输出到"输出.csv"中(位置在同一行,但日期和时间在同一行,距离"短语"行位置高 0-7 行(。我需要它能够在单元格中找到"短语",但现在,它仅适用于完全匹配。如果第 20 列中的单元格包含"短语 1",下面的示例不会将 写入输出文件。

import os
import xlrd
from xlrd import open_workbook
import datetime
from datetime import time
import csv
# edit these params
outputfile = 'output.csv'
phrase = 'phrase'
column = 20
rootdir = '.'

def writeToCSV(datalist,outputfile):
with open(outputfile, 'w') as f:
for sublist in datalist:
for item in sublist:
f.write(item + ',')
f.write('n')
def getdata(filename,row):
# print(row)
# print(filename,'filename')
wb = open_workbook(filename)
items = []
for sheet in wb.sheets():
number_of_rows = sheet.nrows
number_of_columns = sheet.ncols
rows = []
# print(filename,' file')
for row1 in range(row,row-10, -1):
# print()
if row1 >= 0 and row1 < number_of_rows:
rowNo = sheet.cell(row1, 2).value
try :
if rowNo != '' and int(rowNo):
datetime1 = datetime.datetime(*xlrd.xldate_as_tuple(sheet.cell_value(rowx=row1, colx=0), wb.datemode))
date_values = xlrd.xldate_as_tuple(sheet.cell_value(rowx=row1, colx=1), wb.datemode)
time_value = time(*date_values[3:])
# print(time_value)
items.append(str(rowNo))
items.append(str(datetime1))
items.append(str(time_value))
# items[str(rowNo)]= str(datetime1)+'-'+str(time_value)
break
except Exception as e:
pass
# print(e)
# print(items)
return items
def extractData(filename,searchString,column):
wb = open_workbook(filename)
dataList = []
for sheet in wb.sheets():
number_of_rows = sheet.nrows
number_of_columns = sheet.ncols
items = []
rows = []
for row in range(1, number_of_rows):
rowdata = []
for col in range(number_of_columns):
value = (sheet.cell(row, col).value)
if value == searchString :
if col == column :
data = getdata(filename,row)
dataList.append(data)
# print(value)
# rowdata.append(value)
# print(len(rowdata))
return dataList
def main():
for subdir, dirs, files in os.walk(rootdir):
for file in files:
fullname =os.path.join(subdir, file)
list = subdir.split('\')
date = ''
if len(list) > 2 :
date = list[1].split('-')[1] +'-'+ list[2]
# print(date)
# print(file)
if date != '' :
namelist = file.split('-')
if len(namelist)> 2:
if (namelist[0] in date) and (namelist[1] in date):
# print(file)
data = extractData(fullname,phrase,column)
if len(data) > 0 :
writeToCSV(data,outputfile)

if __name__ == '__main__':
main()  # call main method

我知道正则表达式可以很容易地在字符串中找到子字符串,但我不知道在代码中进行修改的确切位置。在不同的语言中,或者如果代码的编写方式不同,我会尝试添加一个 if 语句,如果字符串包含"phrase",该语句会将数据写入输出文件,但我无法确定代码试图在哪里限定短语与单元格值匹配。对此的任何见解都值得赞赏。

在函数extractData中,您将比较if value == searchString :.在这里,您可以检查字符串value(来自 Excel 文件(是否与searchString(您的"pharse"(相同。 您可以将其替换为 PythonssearchString in value。该行应如下所示if searchString in value:如果您只查找子字符串,则不需要正则表达式。

有一些事情似乎导致了问题,但主要的原因可能是您的 extractData 模块在特定工作表的行中找到了您的搜索字符串,并且您的 getData 模块在工作簿中的所有工作表中使用同一行,而没有验证每个工作表是否都上升到该行。最好传递您在哪个工作表中找到搜索字符串,并让"getData"只搜索该特定工作表。

最新更新