我正在尝试使用python来创建随机二进制文件.这就是我已经拥有的:
f = open(filename,'wb')
for i in xrange(size_kb):
for ii in xrange(1024/4):
f.write(struct.pack("=I",random.randint(0,sys.maxint*2+1)))
f.close()
Run Code Online (Sandbox Code Playgroud)
但它非常慢(我的3.9GHz SSD磁盘机上size_kb = 1024,为0.82秒).一个很大的瓶颈似乎是随机int生成(用0替换randint()会将运行时间从0.82s减少到0.14s).
现在我知道有更有效的方法来创建随机数据文件(即dd if =/dev/urandom)但是我试图解决这个问题是为了好奇...有没有明显的方法来改善它?
Jon*_*nts 43
恕我直言 - 以下是完全多余的:
f.write(struct.pack("=I",random.randint(0,sys.maxint*2+1)))
Run Code Online (Sandbox Code Playgroud)
绝对没有必要使用struct.pack
,只需执行以下操作:
import os
with open('output_file', 'wb') as fout:
fout.write(os.urandom(1024)) # replace 1024 with size_kb if not unreasonably large
Run Code Online (Sandbox Code Playgroud)
然后,如果您需要重新使用该文件来读取整数,struct.unpack
那么.
(我的用例是为单元测试生成一个文件,所以我只需要一个与其他生成文件不同的文件).
另一个选择是只写一个UUID4到文件,但由于我不知道具体的用例,我不确定这是否可行.