原文出处
由于原文作者用xlwt写入excel,而excel只能容纳6万多条数据,我的数据量过多,
我一开始选择用openypxl代替,运行速度大大降低,
后又选择xlsxwrite替代,储存量大,且运行速度快!!!!!
##目的文件夹
dirpath=r'D:\aaaaaaa'
d=["小张","小明","小蓝"]
##遍历函数
def files(dirpath, suffix=['.xls', 'xlsx']):
for root, dirs, files in os.walk(dirpath):
for name in files:
if name.split('.')[-1] in suffix:
yield os.path.join(root, name)
if __name__ == '__main__':
jieguo = xlsxwriter.Workbook("jieguo.xlsx") # 生成excel
wsheet = jieguo.add_worksheet('sheet name') # 生成sheet
y = 0 # 生成的excel的行计数
try:
file_list = files(dirpath)
for filename in file_list:
workbook = xlrd.open_workbook(filename) # 读取源excel文件
print(filename)
sheetnum = workbook.nsheets # 获取源文件sheet数目
for m in range(0, sheetnum):
sheet = workbook.sheet_by_index(m) # 读取源excel文件第m个sheet的内容
nrowsnum = sheet.nrows # 获取该sheet的行数
for i in range(0, nrowsnum):
date = sheet.row(i) # 获取该sheet第i行的内容
for n in range(0, len(date)):
aaa = str(date[n]) # 把该行第n个单元格转化为字符串,目的是下一步的关键字比对
# 以下两行达到多个关键词提取目的
for k in range(0, len(d)):
keyword = str(d[k])
if aaa.find(keyword) > 0: # 进行关键字比对,包含关键字返回1,否则返回0
y = y + 1
for j in range(len(date)):
wsheet.write(y, j, sheet.cell_value(i, j)) # 该行包含关键字,则把它所有单元格依次写入入新生成的excel的第y行
#print(wsheet.write)
jieguo.close()
except Exception as e:
print(e)
jieguo.close()