在Python中操作Excel文件最常见的做法是使用openpyxl库,它支持xlsx格式的读写、样式修改和公式计算。当文件体积较大时,如果直接全量加载容易导致内存溢出,需要采用只读或流式方式处理。

如何使用openpyxl读写普通Excel文件
先通过pip安装库,随后即可在代码中引入并操作工作簿。
# 安装:pip install openpyxl
from openpyxl import Workbook, load_workbook
# 写入示例
wb = Workbook()
ws = wb.active
ws['A1'] = '姓名'
ws['B1'] = '分数'
ws.append(['张三', 90])
wb.save('demo.xlsx')
# 读取示例
wb2 = load_workbook('demo.xlsx')
ws2 = wb2.active
for row in ws2.iter_rows(values_only=True):
print(row)
如何处理大型Excel文件
当Excel行数达到几十万甚至上百万时,应使用read_only模式减少内存占用,或者只读取需要的列。
只读模式读取大文件
from openpyxl import load_workbook
# 使用只读模式,不会一次性载入所有数据
wb = load_workbook('big.xlsx', read_only=True)
ws = wb.active
count = 0
for row in ws.iter_rows(values_only=True):
count += 1
if count % 100000 == 0:
print('已处理', count, '行')
wb.close()
使用write_only模式生成大文件
写大文件时可使用write_only=True配合WSWriteOnly,避免构建完整对象树。
from openpyxl import Workbook
wb = Workbook(write_only=True)
ws = wb.create_sheet()
for i in range(1000000):
ws.append([i, '数据' + str(i)])
wb.save('out_big.xlsx')
其他注意事项
- 如果只需读取数据且追求速度,也可考虑pandas的read_excel,但底层仍依赖引擎。
- 处理含公式的单元格时,read_only模式可能读不到计算值,需设置data_only=True。
- 文件路径中尽量避免中文空格,防止部分系统编码问题。
对于超大型文件,若openpyxl仍无法满足性能,可先将xlsx解压后直接解析xml,或使用数据库中间表过渡。
小结
掌握openpyxl的常规读写与只读、只写模式,就能应对绝大多数Python操作Excel的场景。面对大型Excel文件,核心思路是降低内存峰值,按行或分块消费数据。