1. 程式人生 > >xlrd/xlwt與openpyxl的讀寫效率比較

xlrd/xlwt與openpyxl的讀寫效率比較

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的讀寫效率比較