Python处理大文本文件的方法四则

March 23, 2016

Tags:Python

问题:有一个超过4GB的文本文件,对其中文本进行处理时程序会挂掉,因此打算每次处理一段文本后再继续处理下一段,使用Python如何实现?

解决:

1.使用yield创建一个生成器,实现:

def read_in_chunks(file_object, chunk_size=1024):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data

f = open('really_big_file.dat')
for piece in read_in_chunks(f):
    process_data(piece)

2.使用iter方法实现:

def chunked(file_object, chunk_size):
    return iter(lambda: file_object.read(chunk_size), '')

f = open('really_big_file.dat')
for piece in chunked(f, 1024):
    process_data(piece)

3.使用mmap方法

如果当前使用的是64位Linux操作系统(不是很了解Windows平台,mmap方法使用在win32上略可能有差异),可以使用mmap方法映射整个文本文件后进行相应处理:

import mmap

def mmap_chunked(mmap_object, chunk_size):
    while True:
        if mmap_object.tell() == mmap_object.size():
            mmap_object.close()
            break
        piece = mmap_object.read(chunk_size)
        process_data(piece)

f = open('really_big_file.dat')
m = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
mmap_chunked(m, 1024)

4.如果文本文件是按行保存,可以一次读取一行:

for line in open('really_big_file.dat'):
    process_data(line)

· EOF ·