Python 写入大型二进制文件时出现MemoryError
我研究的所有相关问题都涉及到从一个文件中读取数据和向另一个文件写入数据。我正在从头生成一个大文件。我将在这里简化它:Python 写入大型二进制文件时出现MemoryError,python,binary,byte,buffer,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大一点的文件。。。我知道我需要在写入过程中使用缓冲区,但不确
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多个字节。这在逻辑上会导致
内存错误
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;')
当然,您可以将数据以更大的块写入循环中,以使其更有效,但现在您应该有了这个想法
如果使用Python3,请将xrange
替换为range
在Python 2中使用
range
可能是个问题,因为它会试图在内存中创建一个1074000000个整数的数组xrange
创建一个生成器,它一个接一个地返回数字,但不提前重新创建它们。这已成为Pyton 3中的标准做法,xrange
被删除,取而代之的是range
@Jan Vlcinsky谢谢你。。。一个简单的问题…当我尝试你的建议时,我得到了以下错误:回溯(最近一次调用):File“/usr/testpython/scripts/example.py”,第5行,在for i in xrange(107400)中:name错误:name'xrange'不是defined@user3157868我的代码是针对Python2.7的。如果您使用Python3,请改用range
。@Jan Vlinsky,这很有魅力,谢谢!我会研究一下你提到的chunk方法,看它是否能加快速度。谢谢