python - 在 Python 中读取大文件的惰性方法?

标签 python file-io generator

我有一个非常大的 4GB 文件,当我尝试读取它时,我的计算机挂起。 所以我想一 block 一 block 地读取它,在处理完每一 block 后将处理后的 block 存储到另一个文件中并读取下一 block 。

有什么方法可以yield这些片段吗?

我希望有一个懒惰的方法

最佳答案

要编写惰性函数,只需使用 yield :

def read_in_chunks(file_object, chunk_size=1024):
    """Lazy function (generator) to read a file piece by piece.
    Default chunk size: 1k."""
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data


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

另一种选择是使用 iter和一个辅助函数:

f = open('really_big_file.dat')
def read1k():
    return f.read(1024)

for piece in iter(read1k, ''):
    process_data(piece)

如果文件是基于行的,则文件对象已经是行的惰性生成器:

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

关于python - 在 Python 中读取大文件的惰性方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/519633/

相关文章:

python - 无法使用 OpenCV 创建基本视频文件

python - 将整数列表形式的 python 字符串转换为适当的整数列表

c - 无法正常写入文件

c# - 如何在 Windows Phone 8 上使用 Windows.Storage 正确读写文件

python - 为什么这个闭包不修改封闭范围内的变量?

python - 在 sympy 或替代方案中导出点云方程

python - 如何访问NameError中的名称?

c++ - 从 2 个进程读取/写入同一文件

python - 如何在特定时间退出生成器?

python - 生成器理解表达式之间的差异