python大文件处理

    众所周知,python对文件的处理无非就是open或者file那一套,打开关闭,读取写入,但是如果涉及的文件过于大了,直接read可能就直接将内存撑爆了,所以这里也给大家提供一些方案来处理

1. Chunks——分块处理

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>

2. 分段式反复读取

    小文件可以直接调用read方法,但是如果不能确定文件大小,可以反复调用read(size)处理,针对配置文件等文本类型也可以使用readlines读取(返回列表)

for line in f.readlines():
    process(line) # <do something with line>

3. with open()

    在使用python进行大文件读取时,应该让系统来处理,使用最简单的方式,交给解释器,就管好自己的工作就行了。而with语句会自动打开和关闭文件,包括抛出一个内部块异常。他将文件对象视为一个迭代器,会自动的采用缓冲IO和内存管理,所以你不必担心大文件。

#If the file is line based
with open(...) as f:
    for line in f:
        process(line) # <do something with line>

4. fileinput()

fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。

    该模块的input()函数有点类似文件readlines()方法,但它是一个可迭代对象,即每次只生成一行,需要用for循环迭代。在碰到大文件的读取时,无疑效率更高效。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。

import fileinput
for line in fileinput.input(['sum.log']):
    print line
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 高阶函数:将函数作为参数 sortted()它还可以接收一个key函数来实现自定义的排序,reversec参数可反...
    royal_47a2阅读 3,980评论 0 0
  • 前言 ||| 第二章 使用ArcPy编写脚本 Python支持大部分在其他语言中出现的编程结构。在本章内容中,我们...
    muyan阅读 90,548评论 10 55
  • 帮我改个论文格式,帮我改个简历模板,帮我找个韩剧资源 诸如此类吧 总喜欢让男票帮我干一些其实我也能干,就想撒娇偷懒...
    等朝阳888阅读 1,722评论 0 0
  • 校区:科学创想乐高机器人和平校区 时间:周日9:00-10:00 学员:金元宝,晶晶 任教老师:杨玲 教学目标: ...
    Happy00阅读 3,541评论 0 0
  • 小兔白白四岁了,每天都去幼儿园。爸爸妈妈去上班,顺路送宝贝去幼儿园。白白可高兴了。 星期一,白白高高兴兴的去上学了...
    杨丁阅读 2,885评论 0 0