强悍的Python读取大文件的解决方案
作者:Inside_Zhang 发布时间:2021-12-26 19:25:28
标签:python,读取大文件
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
来源:https://blog.csdn.net/lanchunhui/article/details/51581540
0
投稿
猜你喜欢
- 代码如下:--PK select * from sys.key_constraints where object_id = OBJECT_
- 前言在vue里,组件之间的作用域是独立的,父组件跟子组件之间的通讯可以通过prop属性来传参,但是在兄弟组件之间通讯就比较麻烦了。比如A组件
- 背景DMicro 诞生的背景,是因为我写了 10 来年的 PHP,想在公司内部推广 Go, 公司内部的组件及 rpc 协
- 删除字段从Model中删除一个字段要比添加容易得多。 删除字段,仅仅只要以下几个步骤: 删除字段,然后重
- 本文给大家介绍sql server2012安装与启动图文教程,非常详细。sqlserver2012安装步骤如下所示:SQL Server 2
- python的百分号输出比较奇怪,代码如下print('%s%%'%(5))#这样就能输出‘5%'来源:https:
- List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作)
- 前言最近有人对自动上传与发布很感兴趣,都私下找我说了好几次了。今天,必须把他安排,必须实力宠粉。“本篇依次介绍目前主流的
- 新写自己的Threading类class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于o
- 操作所涉及的文件都在当前用户下面的隐藏文件:1. 打开Anaconda Prompt(如果之前生成过Config配置文件则不需要第一步)终端
- 这篇文章主要介绍了python next()和iter()函数原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 网络通用urllib -网络库(stdlib)。requests -网络库。grab – 网络库(基于pycurl)。pycurl – 网络
- 希望这是window.open()打开fullscreen全屏窗口时无提示关闭父窗口的完美解决方案:我们通常都是用控件法,在父窗口文件里放一
- 从百度百科中扣去的这个图片轮播代码,图片向左不间断滚动,有停顿:<!DOCTYPE html PUBLIC "-//W3C/
- 本文实例讲述了JS弹出窗口插件zDialog简单用法。分享给大家供大家参考,具体如下:因为没有元素可以显示到Frameset上面去,所以重新
- 本篇文章主要介绍vue添加标签,废话不多说了,下面上具体代码效果如下:html<div id="app">&
- 年前帮manager 招GUI设计实习生 (PS. 这个实习生职位依然open,欢迎有兴趣的同学来投,邮箱jj.ying [at] hp.c
- 网站发布到IIS后,发现网站使用的Bootstrap框架所引用的woff字体无法正常显示。于是跟踪http请求,发现woff字体请求出现GE
- 一、xlsxwriter 基本用法,创建 xlsx 文件并添加数据官方文档:http://xlsxwriter.readthedocs.or
- 如何用POP3接收电子邮件?POP3大行其道,我看见朋友已经用Jmail和POP3接收邮件了。该如何做?以Jmail4.1为例,我们演示一下