之前写过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写入。
原文地址:https://www.cnblogs.com/xiaohuhu/p/9387486.html
时间: 2024-10-10 13:37:14