写入大型二进制文件时出现MemoryError

时间:2014-06-22 16:57:20

标签: python binary byte buffer

我研究的所有相关问题都涉及从文件中读取并写入另一个文件。我从头开始生成一个大文件。我将在这里简化它:

import os

fo = open("example.example", "wb", 0)

fo.write ((b'\x01\x01\x01\x01')+(((b'\xff') * 1074000000)+ (b'\x01\x01\x01\x01;')))

fo.close()

这个例子应该创建一个比gig更大的文件...我知道我需要在写入过程中使用缓冲区,但不确定如何简单地从头开始写入字节。感谢提前

1 个答案:

答案 0 :(得分:1)

您要求Python在内存中创建超过1074000000个字节。这在逻辑上导致MemoryError

import os

with open("example.example", "wb") as f:
    f.write(b'\x01\x01\x01\x01')
    for i in xrange(1074000000):
        f.write(b'\xff')
    f.write(b'\x01\x01\x01\x01;')

当然,您可以将循环中的数据写入更大的块中以使其更有效,但现在您将有这个想法。

如果您使用Python 3,请将xrange替换为range

在Python 2中使用range可能是个问题,因为它会尝试在内存中创建一个包含1074000000个整数的数组。 xrange而是创建一个生成器,它将逐个返回数字,但不会提前重新创建它们。这已成为Pyton 3中的标准做法,xrange被删除,转而使用range