[问题] openpyxl处理大型xlsx档案的问题

楼主: blacknate (Nate)   2019-07-15 16:55:21
最近写了一段程式处理EXCEL档
主要是比对档案中第一个资料表的第7栏中如果含有“字串”这个字串
就把整个资料列删除,目前跑起来在500个资料列以下的档案都算顺畅
但是如果跑10000列以上的xlsx档,效能显得非常的差
有时候得跑几个小时才会出来,请问各位有没有可以提高效能的写法
感谢!!
程式码如下:
from openpyxl import load_workbook
import time
start = time.time()
wb = load_workbook(filename = 'test.xlsx')
a=wb.get_sheet_names()[0]
sheet_ranges = wb[a]
row=sheet_ranges.max_row
for i in range(1,row):
print(i)
a="字串"
if row == sheet_ranges.max_row:
for arow in range(1,int(row)):
b=str(sheet_ranges.cell(row=int(arow),column=7).value)
if b.find(a)>=0:
sheet_ranges.delete_rows(arow)
wb.save('test.xlsx')
else:
continue
else:
rowa=sheet_ranges.max_row
for arow in range(1,int(rowa)):
b=str(sheet_ranges.cell(row=int(arow),column=7).value)
if b.find(a)>=0:
sheet_ranges.delete_rows(arow)
wb.save('test.xlsx')
else:
continue
print('执行结束')
end = time.time()
elapsed = end - start
print ("程式运行了:", elapsed, "秒")
作者: Hsins (翔)   2019-07-15 17:02:00
直接操作既有的 xlsx 档案本来开销就高。如果我是你,我会读取存入一个 2D array 进行操作,操作完再写入新档
作者: AndCycle (AndCycle)   2019-07-15 17:50:00
不要每删一行就存一次 ...
楼主: blacknate (Nate)   2019-07-15 21:20:00
感谢楼上们,尤其3楼提醒后效能好很多,感恩!!

Links booklink

Contact Us: admin [ a t ] ucptt.com