强悍的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 相关文章推荐
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
django query模块
Apr 20 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
Python编写打字训练小程序
Sep 26 Python
python2 对excel表格操作完整示例
Feb 23 Python
python中Django文件上传方法详解
Aug 05 Python
Pycharm github配置实现过程图解
Oct 13 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 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:风雨欲来 路在何方?
2006/10/09 PHP
PHP脚本的10个技巧(4)
2006/10/09 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
canvas知识总结
2017/01/25 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
python机器学习实战之K均值聚类
2017/12/20 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
浅谈html5与APP混合开发遇到的问题总结
2018/03/20 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
二手书店创业计划书
2014/01/16 职场文书
食堂标语大全
2014/06/11 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
小学教师自我评价
2015/03/04 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS