我正在尝试使用 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()
但它非常慢(在我的 3.9GHz SSD 磁盘机器上,size_kb=1024 为 0.82 秒)。一个大瓶颈似乎是随机 int 生成(用 0 替换 randint() 可以将运行时间从 0.82 秒减少到 0.14 秒)。
现在我知道有更有效的方法来创建随机数据文件(即 dd if=/dev/urandom),但我出于好奇而试图弄清楚这一点......有没有明显的方法来改进这一点?
恕我直言 - 以下是完全多余的:
f.write(struct.pack("=I",random.randint(0,sys.maxint*2+1)))
完全没有必要使用struct.pack
,只需执行以下操作:
import os
fileSizeInBytes = 1024
with open('output_filename', 'wb') as fout:
fout.write(os.urandom(fileSizeInBytes)) # replace 1024 with a size in kilobytes if it is not unreasonably large
然后,如果您需要重新使用该文件来读取整数,那么struct.unpack
then.
(我的用例是生成一个用于单元测试的文件,所以我只需要一个
文件与其他生成的文件不相同)。
另一种选择是仅将 UUID4 写入文件,但由于我不知道确切的用例,所以我不确定这是否可行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)