强悍的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实现网站文件的全备份和差异备份
Nov 30 Python
Python 功能和特点(新手必学)
Dec 30 Python
Python、PyCharm安装及使用方法(Mac版)详解
Apr 28 Python
python实现图片处理和特征提取详解
Nov 13 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Atom的python插件和常用插件说明
Jul 08 Python
Python最小二乘法矩阵
Jan 02 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python logging日志模块原理及操作解析
Oct 12 Python
pycharm实现猜数游戏
Dec 07 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
Python天气语音播报小助手
Sep 25 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
php正则修正符用法实例详解
2016/12/29 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
javascript高级学习笔记整理
2011/08/14 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python实现统计代码行的方法分析
2017/07/12 Python
git进行版本控制心得详谈
2017/12/10 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
Python命令行click参数用法解析
2019/12/19 Python
python连接mongodb集群方法详解
2020/02/13 Python
Django nginx配置实现过程详解
2020/09/10 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
北京SQL新华信咨询
2016/09/30 面试题
小学新教师培训方案
2014/02/03 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
2014年度工作总结报告
2014/12/15 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python