强悍的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编程过程中用单元测试法调试代码的介绍
Apr 02 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
django的settings中设置中文支持的实现
Apr 28 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Django与pyecharts结合的实例代码
May 13 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
PyTorch的Debug指南
May 07 Python
python标准库ElementTree处理xml
May 20 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&amp;mysql(五)
2006/10/09 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
Python字典简介以及用法详解
2016/11/15 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
python实现logistic分类算法代码
2020/02/28 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
车工岗位职责
2013/11/26 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
医院见习总结
2015/06/24 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
Redis高并发缓存架构性能优化
2022/05/15 Redis