我研究的所有相关问题都涉及从文件中读取并写入另一个文件。我从头开始生成一个大文件。我将在这里简化它:
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更大的文件...我知道我需要在写入过程中使用缓冲区,但不确定如何简单地从头开始写入字节。感谢提前
答案 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
。