强悍的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 27 Python
Python 自动补全(vim)
Nov 30 Python
python统计日志ip访问数的方法
Jul 06 Python
Python实现把json格式转换成文本或sql文件
Jul 10 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
Python单链表原理与实现方法详解
Feb 22 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
javascript操作符&quot;!~&quot;详解
2015/02/10 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
Python2/3中urllib库的一些常见用法
2017/12/19 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
python查看列的唯一值方法
2018/07/17 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
python为什么要安装到c盘
2020/07/20 Python
Python 高效编程技巧分享
2020/09/10 Python
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
市场营销职业生涯规划书范文
2014/01/12 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
信息总监管理职责范本
2014/03/08 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
考研复习计划
2015/01/19 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫