强悍的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的发展史
Sep 26 Python
Python中urllib2模块的8个使用细节分享
Jan 01 Python
Python获取任意xml节点值的方法
May 05 Python
python中os模块详解
Oct 14 Python
Python中datetime模块参考手册
Jan 13 Python
Python中你应该知道的一些内置函数
Mar 31 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
对python while循环和双重循环的实例详解
Aug 23 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
教你用python实现一个无界面的小型图书管理系统
May 21 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
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP单链表的实现代码
2016/07/05 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
JS控制伪元素的方法汇总
2016/04/06 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Python 除法小技巧
2008/09/06 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
Python内置模块logging用法实例分析
2018/02/12 Python
python实现日志按天分割
2019/07/22 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
UGG英国官方网站:UGG UK
2018/02/08 全球购物
汇科协同Java笔试题
2012/03/31 面试题
文明礼仪小标兵事迹
2014/01/12 职场文书
文科生自我鉴定
2014/02/15 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
家长对孩子的寄语
2015/02/26 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书