我正在尝试使用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)但是我试图解决这个问题是为了好奇...有没有明显的方法来改善它?
可能重复:
在Windows系统上快速创建大文件?
出于测试目的,我希望能够创建和删除非常大的文件(几个GB).我没有必要写任何特定于他们的东西.它们可能是随机数据.有没有办法通过简单地分配磁盘上的空间来生成一个大文件?如果没有,写这样一个文件的最快方法是什么?要在几秒钟内创建文件是可取的.
我需要在Python脚本中执行此操作,并且在Windows 7上执行此操作.
我需要创建任意大小的文件,不包含数据.可能非常大.虽然我可以循环并编写一个空字符,直到我达到文件大小,这似乎很难看.
with open(filename,'wb') as f:
# what goes here?
Run Code Online (Sandbox Code Playgroud)
什么是高效,pythonic的方式来做到这一点?
我正在编写一个程序,该程序使用动态编程来解决一个难题。DP 解决方案需要存储一个大表。整个表占用大约 300 Gb。物理上它存储在 40 ~7Gb 文件中。我用 byte 标记未使用的表条目\xFF。我想快速为这张桌子分配空间。该程序必须同时在 Windows 和 Linux 下运行。
简而言之,我想以跨平台的方式有效地创建填充特定字节的大文件。
这是我目前使用的代码:
def reset_storage(self, path):
fill = b'\xFF'
with open(path, 'wb') as f:
for _ in range(3715948544 * 2):
f.write(fill)
Run Code Online (Sandbox Code Playgroud)
创建一个 7 Gb 文件大约需要 40 分钟。我如何加快速度?
我查看了其他问题,但似乎没有一个是相关的:
\0或解决方案仅适用于 Windows