- A+
所属分类:SEO好文章
1. 前言
前几天在做日志分析系统,需要处理几十G的文件,我尝试用原来的for line in open(filepath).readlines()处理,但停顿好久也没变化,可见占用不小的内存。在网上搜索了下,找到了两种方法来读取大文件。
2. with读取大文件
with open(filepath) as f: for line in f: <do something with line>
这个方法是在Stackoverflow上找到,这位高手对with读取的解释是这样的:
Thewithstatement handles opening and closing the file, including if an exception is raised in the inner block. Thefor line in ftreats the file objectfas an iterable, which automatically uses buffered IO and memory management so you don't have to worry about large files.
大意就是with负责处理open和close文件,包括抛出内部异常。而for line in f将文件对象f当做迭代对象,将自动处理IO缓冲和内存管理,这样你无需担心大文件的处理了。
3. fileinput处理
用到了Python的fileinput模块,亲测也毫无卡顿,示例代码如下:
import fileinput for line in fileinput.input(['sum.log']): print line
4. 总结
以上两种方法都亲测可用,明显第一种更Pythonic,无需import,而且还能处理close和Exception,更推荐使用。
文章来源:张亚楠博客http://www.zhidaow.com/post/python-read-big-file
来自外部的引用: 1