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

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大一点的文件。提前致谢

最佳答案

您要让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

关于python - 写入大型二进制文件时出现MemoryError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24353526/

10-09 23:14