强悍的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 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python解析xml中dom元素的方法
Mar 12 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
python 使用get_argument获取url query参数
Apr 28 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Selenium定位元素操作示例
Aug 10 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
Python 列表去重去除空字符的例子
Jul 20 Python
Python3视频转字符动画的实例代码
Aug 29 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
python如何通过pyqt5实现进度条
Jan 20 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 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/06/07 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php分页函数完整实例代码
2014/09/22 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python3序列化与反序列化用法实例
2015/05/26 Python
python匿名函数用法实例分析
2019/08/03 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
Why do we need Unit test
2013/01/03 面试题
信息专业学生学习的自我评价
2014/02/17 职场文书
交通安全责任书范本
2014/07/24 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书