将(大量)零写入二进制文件

Ima*_*ngo 5 python binary file

这可能是一个愚蠢的问题,但我无法找到正确的答案。我想将(2000, 2000, 2000)零数组的二进制表示(不要问为什么)存储到磁盘中,二进制格式。实现这一目标的传统方法是:

with open('myfile', 'wb') as f:
    f.write('\0' * 4 * 2000 * 2000 * 2000)  # 4 bytes = float32
Run Code Online (Sandbox Code Playgroud)

但这意味着创建一个非常大的字符串,这根本不是必需的。我知道另外两个选项:

  • 迭代元素并一次存储一个字节(非常慢)

  • 创建一个 numpy 数组并将其刷新到磁盘(与上面示例中的字符串创建一样消耗内存)

我正在寻找类似的东西write(char, ntimes)(因为它存在于 C 和其他语言中)以char ntimesC 速度而不是 Python 循环速度复制到磁盘上,而不必在内存上创建如此大的数组。

glg*_*lgl 1

我不知道你为什么对“Python的循环速度”这么大惊小怪,但是按照这样的方式写

for i in range(2000 * 2000):
     f.write('\0' * 4 * 2000)  # 4 bytes = float32
Run Code Online (Sandbox Code Playgroud)

将告诉操作系统写入 8000 个 0 字节。返回后write,在下一次循环运行中再次调用它。

循环的执行速度可能比 C 中的稍慢,但这绝对不会产生影响。

如果可以使用稀疏文件,您也可以查找所需文件大小的位置,然后截断文件。