强悍的Python读取大文件的解决方案


Posted in Python onFebruary 16, 2019

Python 环境下文件的读取问题,请参见拙文 Python基础之文件读取的讲解

这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。

1. read() 接口的问题

f = open(filename, 'rb')
f.read()

我们来读取 1 个 nginx 的日至文件,规模为 3Gb 大小。read() 方法执行的操作,是一次性全部读入内存,显然会造成:

MemoryError
...

也即会发生内存溢出。

2. 解决方案:转换接口

  • (1)readlines() :读取全部的行,构成一个 list,实践表明还是会造成内存的问题;
for line in f.reanlines():
  ...
  • (2)readline():每次读取一行,
while True:
  line = f.readline()
  if not line:
    break
  • (3)read(1024):重载,指定每次读取的长度
while True:
  block = f.read(1024)
  if not block:
    break

3. 真正 Pythonic 的方法

真正 Pythonci 的方法,使用 with 结构:

with open(filename, 'rb') as f:
  for line in f:
    <do something with the line>

对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。

There should be one ? and preferably only one ? obvious way to do it.

Reference

How to read large file, line by line in python

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python中decorator使用实例
Apr 14 Python
详解Python的Django框架中的Cookie相关处理
Jul 22 Python
python实现识别相似图片小结
Feb 22 Python
详解Swift中属性的声明与作用
Jun 30 Python
python pandas 如何替换某列的一个值
Jun 09 Python
python 反向输出字符串的方法
Jul 16 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
对Django中内置的User模型实例详解
Aug 16 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
python中如何打包用户自定义模块
Sep 23 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 Python
Python基础之文件读取的讲解
Feb 16 #Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 #Python
Python3 修改默认环境的方法
Feb 16 #Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 #Python
对Python3 解析html的几种操作方式小结
Feb 16 #Python
Python实现爬取马云的微博功能示例
Feb 16 #Python
对Python3 * 和 ** 运算符详解
Feb 16 #Python
You might like
php面向对象的方法重载两种版本比较
2008/09/08 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
JS原型链怎么理解
2016/06/27 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
降消项目实施方案
2014/03/30 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
导游词之青城山景区
2019/09/27 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
java实现web实时消息推送的七种方案
2022/07/23 Java/Android