强悍的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动态参数用法实例分析
May 25 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
python飞机大战游戏实例讲解
Dec 04 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 Python
python 中[0]*2与0*2的区别说明
May 10 Python
pytorch实现ResNet结构的实例代码
May 17 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实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
Python 正则表达式操作指南
2009/05/04 Python
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
跟老齐学Python之集合(set)
2014/09/24 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
初中同学会活动方案
2014/08/22 职场文书
出差报告格式模板
2014/11/06 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
毕业证明模板
2015/06/19 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫