温馨提示×

如何解决python 使用openpyxl读写大文件的问题

发布时间:2021-03-15 10:49:35 来源:亿速云 阅读:104 作者:TREX 栏目:开发技术

这篇文章主要讲解了“如何解决python 使用openpyxl读写大文件的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决python 使用openpyxl读写大文件的问题”吧!

由于需要处理xlsx类型的文件,我使用了openpyxl来处理,然而文件比较大,大约有60多MB。读文件的时候虽然慢了一点,但还是能够读出来,但是当我想写入时却报错了。

如何解决python 使用openpyxl读写大文件的问题

显示设备没有多余的空间,百度了一下,发现有不少关于openpyxl读写大文件的问题。总结来看,解决方案主要有以下两种,当然,我两种都用上了。

手动释放内存

del wb, ws
gc.collect()

这一招还算有用,在读完文件后可以看到内存占用明显下降了一点。

安装lxml

使用命令·pip install lxml安装依赖

这个依赖并非必须安装的依赖,但是可以使openpyxl流式处理数据。

总之使用了以上两种方案后,终于可以成功处理数据了。

补充:openpyxl读取大文件的若干问题

需要编写一个EXCEL文件对比工具

excel文件通常8MB,300张左右的表,每张表实际范围为ZZ500.

使用openpyxl对表格进行遍历,完成两个表之间的对比,找出公式不相同的单元格编程中遇到若干问题

1、读取时报错,错误代码忘记了,原因是通过数组的方式读取了一个不存在的数值

如 SS['AA'],这个数值没有定义,因此报错(PHP直接返回空值),使用SS.get('AA',null)进行修改

D:\Python34\Lib\site-packages\openpyxl\reader\style.py

164: format_code = builtin_formats.get(numFmtId,'General')

2、读取时内存占用过大

基本就是内存占用了2G以上以后,程序就不动了,原因是某些表格的表格范围识别的非常大,最大可为ZZ65535

通过研究,代码进行了如下修改

1:使用X64版本,X64版本在运行时,可以运行4G以内内存占用的程序,比2G大一倍,能够完成大部分表格的读取,如ZZ5000,但是遇到ZZ65535范围的表格,内存占用达到了4G+,也会导致程序停止运行.

2:限制最大单元格遍历范围,最大限制为ZZ5000,能够有效降低内存占用

3:定时重新读取EXCEL文件(如每对比30张表),释放内存,(Python内存释放真的很痛苦,全部是指针引用,A=B,DEL A;是不会释放空间的,要DEL B才行).

4:虽然openpyxl读取文件时有个只读模式(性能模式),但是速度实在是太慢了.

通过代码修改,现在完成文件对比所用的内存通常在2G以内

感谢各位的阅读,以上就是“如何解决python 使用openpyxl读写大文件的问题”的内容了,经过本文的学习后,相信大家对如何解决python 使用openpyxl读写大文件的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

免费拨打  400 100 2938 免费拨打 400 100 2938
24小时售后技术支持 24小时售后技术支持
返回顶部 返回顶部