python:大文件迭代器,GB级别,read(),readline(),readlines()以及语法糖with open()
2017-12-07 23:31
423 查看
最近处理文本文档时(文件约2GB大小),出现
f = open('/path/to/file', 'r')
print f.read()
finally:
if f:
f.close()
如果文件很小,
process(line) # <do something with line>
Read In Chunks 处理大文件是很容易想到的就是将大文件分割成若干小文件处理,处理完每个小文件后释放该部分内存。这里用了
"""
Lazy function (generator) to read a file piece by piece.
Default chunk size: 1M
You can set your own chunk size
"""
file_object = open(filePath)
while True:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data
if __name__ == "__main__":
filePath = './path/filename'
for chunk in read_in_chunks(filePath):
process(chunk) # <do something with chunk>
Using
with open(...) as f:
for line in f:
process(l
a27b
ine) # <do something with line>
memoryError错误和文件读取太慢的问题,后来找到了两种比较快
Large File Reading的方法,本文将介绍这两种读取方法。
Preliminary
我们谈到“文本处理”时,我们通常是指处理的内容。Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法:.read()、
.readline()和
.readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。
.read()每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而
.read()生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。下面是
read()方法示例:try:
f = open('/path/to/file', 'r')
print f.read()
finally:
if f:
f.close()
如果文件很小,
read()一次性读取最方便;如果不能确定文件大小,反复调用
read(size)比较保险;如果是配置文件,调用
readlines()最方便:for line in f.readlines():
process(line) # <do something with line>
Read In Chunks 处理大文件是很容易想到的就是将大文件分割成若干小文件处理,处理完每个小文件后释放该部分内存。这里用了
iter & yield:def read_in_chunks(filePath, chunk_size=1024*1024):
"""
Lazy function (generator) to read a file piece by piece.
Default chunk size: 1M
You can set your own chunk size
"""
file_object = open(filePath)
while True:
chunk_data = file_object.read(chunk_size)
if not chunk_data:
break
yield chunk_data
if __name__ == "__main__":
filePath = './path/filename'
for chunk in read_in_chunks(filePath):
process(chunk) # <do something with chunk>
Using with open()
with语句打开和关闭文件,包括抛出一个内部块异常。
for line in f文件对象
f视为一个迭代器,会自动的采用缓冲
IO和内存管理,所以你不必担心大文件。#If the file is line based
with open(...) as f:
for line in f:
process(l
a27b
ine) # <do something with line>
Conclusion
在使用python进行大文件读取时,应该让系统来处理,使用最简单的方式,交给解释器,就管好自己的工作就行了相关文章推荐
- python中read() readline()以及readlines()用法
- python中read() readline()以及readlines()区别 .
- python中read() readline()以及readlines()区别--转自CSDN
- python 读取文件f.read()、f.readline()和f.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 点滴记录8:文件操作read、readline与readlines
- 【体会Python之美】【文件】file,open,read,readline,readlines,write,close
- python中read() readline()以及readlines()用法