Enjoy the good life everyday!
关闭
欢迎来PyGo个人空间 ^_^
openpyxl写入性能的比较 | PyGo²技术分享

openpyxl写入性能的比较

简单比较一下openpyxl在行写入与单元格写入性能上的对比。



Python Excel


简述

之前一直用xlrd、xlwt处理表格,但是发现限制台,超过了65535就不能读取了,改用openpyxl,了解了一下之后,发现openpyxl可以行写入,测试一下行写入与单元格写入二者的性能。

样本

表格元数据176233行、7列,数据包含字符串类型、数字、时间等常见类型。

试验体

PC:MacOS
openpyxl版本:3.0.7

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import datetime
import openpyxl


# 读取
reader_workbook = openpyxl.load_workbook('data/LLBB_GRCKYE1.xlsx')
sheet = reader_workbook.get_sheet_by_name(reader_workbook.sheetnames[0])
sheet_row = sheet.max_row
sheet_col = sheet.max_column
# ===================================
# 行写入
start1 = datetime.datetime.now()
new_wb = openpyxl.Workbook()
new_sheet = new_wb.create_sheet(title='Sheet', index=0)
for row in sheet.values:
new_sheet.append(row)
new_wb.save('result/res2.xlsx')
end1 = datetime.datetime.now()
print((end1-start1).seconds)
# ===================================
# 单元格写入
start2 = datetime.datetime.now()
new_wb = openpyxl.Workbook()
new_sheet = new_wb.create_sheet(title='Sheet', index=0)
for row in range(1, sheet_row + 1, 1):
for col in range(1, sheet_col + 1, 1):
new_sheet.cell(row=row,
column=col,
value=sheet.cell(row=row, column=col).value
)
new_wb.save('result/res3.xlsx')
end2 = datetime.datetime.now()
print((end2-start2).seconds)

比较结果

单位:s

类别 第1次 第2次 第3次 第4次 第5次 第6次 第7次 第8次 第9次 第10次 平均值
25 26 28 29 27 28 27 26 26 26 26.8
单元格 26 28 30 28 30 29 27 27 26 29 28.0

总结

总体来说,大数据量可以看出行写入的速率较快,如果是数据量在几万行,性能都差不多,而且行写入代码也比较简单。

  • 本文作者:mingliang.gao【一个爱老婆Python程序猿。。。。。。】
  • 本文链接: http://pygo2.top/articles/24240/
  • 版权声明: 本博客所有文章欢迎转载,转载请注明出处!
觉得有帮助 请偶坐个公交车
0%