强悍的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常用库推荐
Dec 04 Python
详解python中requirements.txt的一切
Mar 03 Python
Python实现读取及写入csv文件的方法示例
Jan 12 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
实践Vim配置python开发环境
Jul 02 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
Python日志处理模块logging用法解析
May 19 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
浅析Python实现DFA算法
Jun 26 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导出excel格式数据问题
2014/03/11 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
javascript 数组排序函数
2009/08/20 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
django反向解析和正向解析的方式
2018/06/05 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
Python中的self用法详解
2019/08/06 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
教师见习期自我鉴定
2014/04/28 职场文书
大学校园招聘会感想
2015/08/10 职场文书
部门主管竞聘书
2015/09/15 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis