xlrd/xlwt與openpyxl的讀寫效率比較
阿新 • • 發佈:2018-07-29
word row 3.1 無法 想要 整體 clas pretty ring
之前寫過python中xlrd/xlwt與openpyxl處理Excel的文章,也提到過兩者的主要區別在於寫入操作,其中xlwt針對Ecxec2007之前的版本,即.xls文件,其要求單個sheet不超過65535行,而openpyxl則主要針對Excel2007之後的版本(.xlsx),它對文件大小沒有限制。另外就是兩者讀寫速度存在差異,為了比較它們的差異,特別做了以下測試:
測試一:xlrd與openpyxl的讀取速度差異
?? 由於文件較小時,兩者差別不明顯,因此這裏選取了一個137732行、10列,大小為7.53MB的.xlsx文件進行測試,分別使用xlrd與openpyxl模塊讀取同一位置的值並打印,過程中利用time.clock()計算所用時間(win10-x64,i5),兩者代碼如下:
#使用xlrd進行讀取
import xlrd
import time
time.clock()
f = xlrd.open_workbook(‘test.xlsx‘)
sheet1 = f.sheet_by_name(‘Sheet1‘)
print(sheet1.cell(137731,2).value)
t = time.clock()
print(t)
#使用openpyxl進行讀取
import openpyxl
import time
time.clock()
f = openpyxl.load_workbook(‘test.xlsx‘)
sheet1 = f[‘Sheet1‘]
print(sheet1.cell(row = 137732 ,column = 3).value)
t = time.clock()
print(t)
重復進行5次結果如下 :
方法 | 第一次(s) | 第二次 | 第三次 | 第四次 | 第五次 | 平均時間 |
---|---|---|---|---|---|---|
xlrd | 13.574 | 13.110 | 13.209 | 13.187 | 13.075 | 13.231 |
openpyxl | 20.815 | 21.959 | 21.264 | 20.820 | 22.359 | 21.443 |
可見對於大文件的讀取xlrd耗時大概為openpyxl的61.7%,有較大優勢。
測試二:xlwt與openpyxl的寫入速度差異
?? 這裏不考慮表格字體、邊框、對齊等格式要求,分別用xlwt與openpyxl生成一個65535行,1列,單元格內為整型數值的.xls與xlsx文件,代碼如下:
#使用xlwt生成文件
import xlwt
import time
time.clock()
f = xlwt.Workbook()
sheet1 = f.add_sheet(‘A Demo‘)
for i in range(65535):
sheet1.write(i,0,i)
f.save(‘xlwt.xls‘)
t = time.clock()
print(t)
#使用openpyxl生成文件
import openpyxl
import time
time.clock()
f = openpyxl.Workbook()
sheet1 = f.active
for i in range(65535):
sheet1.cell(row = i+1,column = 1,value = i)
f.save(‘openpyxlw.xlsx‘)
t = time.clock()
print(t)
5次測試結果如下:
方法 | 第一次(s) | 第二次 | 第三次 | 第四次 | 第五次 | 平均時間 |
---|---|---|---|---|---|---|
xlwt | 1.232 | 1.175 | 1.185 | 1.563 | 1.221 | 1.275 |
openpyxl | 3.028 | 3.023 | 2.953 | 3.025 | 3.035 | 3.013 |
同樣可以發現xlwt耗時大概為openpyxl的42.3%,效率明顯較高。
??整體而言,兩種包對小文件的讀寫速度差別不大,而面對較大文件,xlrd/xlwt速度明顯優於openpyxl,但因為xlwt無法生成xlsx是個硬傷,所以想要盡量提高效率又不影響結果時,可以考慮用xlrd讀取,用openpyxl寫入。
xlrd/xlwt與openpyxl的讀寫效率比較