Python 如何在不影响MemoryError的情况下将大量字节数组逐步写入文件
我正在开发一种工具,用于生成用于测试目的的随机数据。请看下面我的代码中让我悲伤的部分。当文件大小在400MB左右时,这比传统的解决方案工作得更好、更快(大约需要20秒),但是,一旦文件大小达到500MB左右,就会出现内存不足错误。我如何从内存中提取内容并将其写入一个文件中,一次内存不超过10 MBPython 如何在不影响MemoryError的情况下将大量字节数组逐步写入文件,python,bytearray,Python,Bytearray,我正在开发一种工具,用于生成用于测试目的的随机数据。请看下面我的代码中让我悲伤的部分。当文件大小在400MB左右时,这比传统的解决方案工作得更好、更快(大约需要20秒),但是,一旦文件大小达到500MB左右,就会出现内存不足错误。我如何从内存中提取内容并将其写入一个文件中,一次内存不超过10 MB def createfile(filename,size_kb): tbl = bytearray(range(256)) numrand = os.urandom(size_kb*1
def createfile(filename,size_kb):
tbl = bytearray(range(256))
numrand = os.urandom(size_kb*1024)
with open(filename,"wb") as fh:
fh.write(numrand.translate(tbl))
createfile("file1.txt",500*1024)
非常感谢您提供的任何帮助您可以一次写出10MB的数据块,而不是一次性生成整个文件。正如@mhawke所指出的,
translate
调用是多余的,可以删除:
def createfile(filename,size_kb):
chunks = size_kb /(1024*10)
with open(filename,"wb") as fh:
for iter in range(chunks):
numrand = os.urandom(size_kb*1024 / chunks)
fh.write(numrand)
numrand = os.urandom(size_kb*1024 % chunks)
fh.write(numrand)
createfile("c:/file1.txt",500*1024)
将Jaco和mhawk组合在一起并处理一些浮点转换。。下面是可以在10秒内生成Gbs数据的代码
def createfile(filename,size_kb):
chunksize = 1024
chunks = math.ceil(size_kb / chunksize)
with open(filename,"wb") as fh:
for iter in range(chunks):
numrand = os.urandom(int(size_kb*1024 / chunks))
fh.write(numrand)
numrand = os.urandom(int(size_kb*1024 % chunks))
fh.write(numrand)
在不到8秒的时间内创建1 Gb文件翻译()的目的是什么?在这段代码中,它将每个字节转换为自身,但一无所获。至于如何使用更少的内存,只需抓取块中的随机字节。。。。说1MB或其他什么,然后迭代直到所需的字节数被填满。
chunksize=1024;chunks=math.ceil(size\u kb/chunksize)
因为Uradom需要一个整数只有当size\u kb是'float1'时才需要这个,否则python将执行整数除法。其余部分由第二个numrand实例处理