强悍的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递归查询菜单并转换成json实例
Mar 27 Python
python实现ID3决策树算法
Dec 20 Python
Python命令行解析模块详解
Feb 01 Python
python画折线图的程序
Jul 26 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
如何获取Python简单for循环索引
Nov 21 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
python在地图上画比例的实例详解
Nov 13 Python
使用django自带的user做外键的方法
Nov 30 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
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
代码生成器 document.write()
2007/04/15 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python二元赋值实用技巧解析
2019/10/25 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Python dict的常用方法示例代码
2020/06/23 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
教育英语专业毕业生的求职信
2014/03/13 职场文书
伊索寓言教学反思
2014/05/01 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
军事理论课感想
2015/08/11 职场文书
学生病假条范文
2015/08/17 职场文书
python某漫画app逆向
2021/03/31 Python
Nginx四层负载均衡的配置指南
2021/06/11 Servers
MySQL数据库完全卸载的方法
2022/03/03 MySQL
解决redis批量删除key值的问题
2022/03/23 Redis
python中pycryto实现数据加密
2022/04/29 Python