python:大文件迭代器,GB级别,read(),readline(),readlines()以及语法糖with open()
来源:互联网 发布:php 判断大小 编辑:程序博客网 时间:2024/06/06 01:50
最近处理文本文档时(文件约2GB大小),出现memoryError
错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading
的方法,本文将介绍这两种读取方法。
Preliminary
我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: .read()
、.readline()
和 .readlines()
。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。 .read()
每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而.read()
生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。下面是read()
方法示例:
调用read()
会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)
方法,每次最多读取size个字节的内容。另外,调用readline()
可以每次读取一行内容,调用readlines()
一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()
一次性读取最方便;如果不能确定文件大小,反复调用read(size)
比较保险;如果是配置文件,调用readlines()
最方便:
Read In Chunks
处理大文件是很容易想到的就是将大文件分割成若干小文件处理,处理完每个小文件后释放该部分内存。这里用了iter & yield
:
Using with open()
with
语句打开和关闭文件,包括抛出一个内部块异常。for line in f
文件对象f
视为一个迭代器,会自动的采用缓冲IO
和内存管理,所以你不必担心大文件。
Conclusion
在使用python进行大文件读取时,应该让系统来处理,使用最简单的方式,交给解释器,就管好自己的工作就行了
- python:大文件迭代器,GB级别,read(),readline(),readlines()以及语法糖with open()
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()区别
- python中read() readline()以及readlines()区别 .
- python中read() readline()以及readlines()区别
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()区别 .
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()区别
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()区别
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()对比
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()用法
- SpringBoot集成MyBatis时要配置的Mapper中的xml
- ug472--xilinx 时钟资源学习总结(1)
- 基于QT实现的简易3*3拼图游戏
- redis学习笔记五(单机多节点集群)
- List集合去除重复对象及equals()、hashCode()方法的作用
- python:大文件迭代器,GB级别,read(),readline(),readlines()以及语法糖with open()
- Aptana插件版Zip包下载方法
- Java基础之模拟购物系统案例
- 没有树莓派显示器,键盘,鼠标,串口, 树莓派怎么无线上网?
- C++通过特定时间戳转日期
- 【angular】解决跨域问题
- 设计模式之原型模式
- python---局域网扫描简化版、平台判断、平台创建文件、文件操作、range、数字列表转成字符列表、不同平台ping操作
- 使用Vegan包进行生态学数据排序分析的学习(一)