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