[問題] 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