python大文件处理

作者: MA木易YA | 来源:发表于2019-03-05 16:37 被阅读2次

        众所周知,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
    

    相关文章

      网友评论

        本文标题:python大文件处理

        本文链接:https://www.haomeiwen.com/subject/gplwdqtx.html