创建随机二进制文件

gar*_*arh 17 python random

我正在尝试使用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到文件,但由于我不知道具体的用例,我不确定这是否可行.