强悍的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彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
使用python实现画AR模型时序图
Nov 20 Python
pymysql的简单封装代码实例
Jan 08 Python
python统计字符串中字母出现次数代码实例
Mar 02 Python
记录模型训练时loss值的变化情况
Jun 16 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
python中关于数据类型的学习笔记
Jul 19 Python
Python 日期与时间转换的方法
Aug 01 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
如何设置mysql允许外网访问
2013/06/04 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
Laravel框架Eloquent ORM修改数据操作示例
2019/12/03 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
jquery禁用右键示例
2014/04/28 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
Vue响应式原理详解
2017/04/18 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
Python如何实现的二分查找算法
2020/05/27 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
安全守法证明
2015/06/23 职场文书
家长会感言
2015/08/01 职场文书