强悍的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对小数进行除法运算的正确方法示例
Aug 25 Python
Python中logging模块的用法实例
Sep 29 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
在python中将list分段并保存为array类型的方法
Jul 15 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
通过实例学习Python Excel操作
Jan 06 Python
python同时遍历两个list用法说明
May 02 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
python小白学习包管理器pip安装
Jun 09 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
php二维码生成
2015/10/19 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
js版本A*寻路算法
2006/12/22 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
js简单抽奖代码
2015/01/16 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
初识Javascript小结
2015/07/16 Javascript
ES6的新特性概览
2016/03/10 Javascript
使用JS动态显示文本
2017/09/09 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python yield 使用浅析
2015/05/28 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
使用python生成目录树
2018/03/29 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
浅析Python的命名空间与作用域
2020/11/25 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
给排水专业应届生求职信
2013/10/12 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
素质教育培训心得体会
2016/01/19 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
python热力图实现的完整实例
2022/06/25 Python