0

0

Python Excel 大文件读写的 openpyxl 优化

冰川箭仙

冰川箭仙

发布时间:2026-02-21 15:51:10

|

136人浏览过

|

来源于php中文网

原创

openpyxl读大excel卡死因默认全量加载内存,应启用read_only=true流式解析并避免max_row等全表扫描操作;写入慢因逐行append开销大,需批量写入或write_only=true模式。

python excel 大文件读写的 openpyxl 优化

openpyxl 读大 Excel 文件为什么卡死?

因为 openpyxl 默认加载全部单元格到内存,哪怕你只读一列,它也会解析整个 .xlsx 文件的 XML 结构。10MB 的文件可能吃掉 500MB 内存,100MB 文件直接触发 MemoryError 或长时间无响应。

常见错误现象:openpyxl.load_workbook() 卡住几十秒、进程内存飙升、报错 xml.etree.ElementTree.ParseError: out of memory

  • read_only=True 模式打开——这是最有效的起点,底层改用流式 XML 解析,内存占用降为原来的 1/10 左右
  • 避免调用 ws.iter_rows() 后再转成 list(),会一次性拉取全部行;应直接 for 循环迭代
  • 不要访问 ws.max_rowws.max_column,它们在 read_only=True 下会强制扫描全表,拖慢速度

怎么只读某几列又不爆内存?

openpyxl 本身不支持“按列名跳读”,但你可以结合 read_only=True + 列索引过滤,避开加载无关字段。

使用场景:日志表有 50 列,你只要 "user_id""created_at",其他列全是干扰项。

立即学习Python免费学习笔记(深入)”;

Delphi语言参考 中文WORD版
Delphi语言参考 中文WORD版

本文档主要讲述的是Delphi语言参考;Delphi是一种结构化、面向对象,类型强健,编译执行的高级语言,其object pascal的语法规范具有易读性好、编译快速、多单元的模块化程序设计等优点。 Delphi技术Borland的组件框架和快速开发环境。大多数情况下,本语法指引假设你使用的是Borland的开发工具。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载
  • 先用 next(ws.iter_rows(min_row=1, max_row=1)) 读首行,拿到列名和对应索引(比如 "user_id" 在第 2 列 → index=1)
  • 后续遍历数据行时,只取你需要的索引位置,例如 row[1].valuerow[4].value
  • 别用 row["user_id"].value 这种写法——read_only 模式下 row 是 tuple,不支持键访问

openpyxl 写大文件慢得离谱?别用 active sheet append

逐行 ws.append() 看似自然,但每调用一次都会触发样式、行列元数据的内部重建,10 万行可能耗时几分钟。

性能影响:append 模式下写入速度随行数增长呈次线性下降,而批量写入可稳定在 1–3 万行/秒(取决于硬件)。

  • 把数据组织成二维 list(如 data = [[a,b,c], [d,e,f]]),然后用 ws.append(data) 一次写入整批
  • 如果必须逐条生成,攒够 1000 行再 ws.append() 一次,比单行 append 快 5–8 倍
  • 写入前关掉自动计算和样式:设 wb = Workbook(write_only=True),这会禁用所有非必要对象,大幅提速并省内存

write_only=True 模式下不能用哪些功能?

这个模式本质是“只写流”,牺牲了灵活性换性能和内存控制。一旦启用,很多你以为理所当然的操作会报错或失效。

容易踩的坑:开了 write_only=True 还想设置单元格字体、边框、合并单元格,或者想回头修改已写入的行。

  • ws.cell() 不可用,只能用 ws.append()ws.append(row)
  • 不能读取已写入的内容(没有 ws[1][0].value 这种操作)
  • 不能设置单个单元格的 fontborderalignment;样式只能通过 NamedStyle 预定义并应用到整列(且有限制)
  • 保存后不能再次打开编辑——write_only=True 的工作簿只能写一次,保存即终结

复杂点在于:没有银弹。如果你既要高速写入,又要精细样式控制,就得拆成两步——先用 write_only=True 快速生成数据表,再用普通模式打开、加样式、另存。这个切换过程本身就有开销,得权衡。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1929

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2106

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1134

2024.11.28

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

347

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1080

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

178

2025.09.12

html边框设置教程
html边框设置教程

本教程将带你全面掌握HTML/CSS边框设置,从基础的border属性讲起,涵盖所有边框样式、圆角设置及高级技巧,帮助你快速上手实现各种边框效果。

41

2025.09.02

excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

1436

2023.07.25

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

796

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 18.2万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号