xlrd/xlwt与openpyxl的读写效率比较

之前写过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写入。

猜你喜欢

转载自www.cnblogs.com/xiaohuhu/p/9387486.html
今日推荐