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

来源:互联网 发布:风冷知乎 编辑:程序博客网 时间:2024/06/05 07:52

   之前写过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 xlrdimport timetime.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 openpyxlimport timetime.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有明显的优势。

测试二:xlwt与openpyxl的写入速度差异

   这里不考虑表格字体、边框、对齐等格式要求,分别用xlwt与openpyxl生成一个65535行,1列,单元格内为整型数值的.xls与xlsx文件,代码如下:

#使用xlwt生成文件import xlwtimport timetime.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 openpyxlimport timetime.clock()f = openpyxl.Workbook()sheet1 = f.activefor 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在写入时速度更快,效率更高。

  整体而言,两个库对小文件的读写速度差别不大,而当文件较大时,xlrd/xlwt速度明显优于openpyxl,但因为xlwt无法生成xlsx是个硬伤,所以想要尽量提高效率又不影响结果时,可以考虑用xlrd读取,用openpyxl写入。