【张亚楠】Python读取大文件

1. 前言

前几天在做日志分析系统,需要处理几十G的文件,我尝试用原来的for line in open(filepath).readlines()处理,但停顿好久也没变化,可见占用不小的内存。在网上搜索了下,找到了两种方法来读取大文件。

2. with读取大文件

with读取是非常Pythonic的方法,示例如下:

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

  • 版权声明:除非注明,本博客均为北京SEO方法的原创文章,转载或引用请以超链接形式标明本文地址,否则会在SEO圈内公开此种不尊重版权的行为,谢谢合作!本文地址:https://seofangfa.com/seo-articles/python-read-big-file.html
    本文信息:于1年前,由方法SEO发表,共 801字。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  0   博主  0   引用   1

    来自外部的引用: 1

    • 【张亚楠】Python读取大文件 – 人也欢博客