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%