python读取大文件

最近在学习python的过程当中接触到了python对文件的读取。python读取文件通常状况是利用open()函数以及read()函数来完成:python

f = open(filename,'r')
f.read()

这种方法读取小文件,即读取远远大小小于内存的文件显然没有什么问题。可是若是是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会形成MemoryError ... 也就是发生内存溢出。函数

发生这种错误的缘由在于,read()方法执行操做是一次性的都读入内存中,显然文件大于内存就会报错。学习

解决方法:spa

这里发现跟read()相似的还有其余的方法:read(参数)、readline()、readlines()日志

(1)read(参数):经过参数指定每次读取的大小长度,这样就避免了由于文件太大读取出问题。code

while True:
    block = f.read(1024)
    if not block:
        break

 (2)readline():每次读取一行对象

while True:
    line = f.readline()
    if not line:
        break

 

(3)readlines():读取所有的行,构成一个list,经过list来对文件进行处理,可是这种方式依然会形成MemoyErrorblog

for line in f.readlines():
    ....

 

以上基本分析了python中读取文件的方法,可是总感受不能达到python中所强调的优雅,后来发现了还有下面的解决方法:内存

pythonic(我理解的是很python的python代码)的解决办法:get

with open(filename, 'r') as flie:
    for line in file:
        ....

 

对可迭代对象file进行迭代,这样会自动的使用buffered IO以及内存管理,这样就没必要担忧大文件问题了。

后来,又发现了一个模块:linecache,这个模块也能够解决大文件读取的问题,而且能够指定读取哪一行,

# 输出第2行
text = linecache.getline(filename, 2)
相关文章
相关标签/搜索