在python中创建特定大小的文件

one*_*ach 29 python file

我想创建一个特定大小的文件(比如1GiB).内容并不重要,因为我会填写内容.

我在做的是:

f = open("E:\\sample", "wb")
size = 1073741824 # bytes in 1 GiB
f.write("\0" * size)
Run Code Online (Sandbox Code Playgroud)

但这需要很长时间才能完成.它花了我大约1分钟.可以做些什么来改善这个?

Sha*_*nu4 39

警告此解决方案提供您可能不期望的结果.见UPD ......

1创建新文件.

2寻求大小为1字节.

3写1个字节.

4利润:)

f = open('newfile',"wb")
f.seek(1073741824-1)
f.write(b"\0")
f.close()
import os
os.stat("newfile").st_size

1073741824
Run Code Online (Sandbox Code Playgroud)

UPD: 在我的系统上查找并截断两者都创建稀疏文件(Linux + ReiserFS).它们具有所需的大小但实际上不占用存储设备上的空间.因此,这不适合快速空间分配.我刚创建了只有25Gib的100Gib文件,结果仍然有25Gib免费.

次要更新:为Py3兼容性 添加了b前缀f.write("\0").

  • 在python 3中,它是`f.write(b"\ 0")` (6认同)
  • 但是,这不会生成稀疏文件吗?(这可能是需要的,但它并不完全相同) (2认同)

Imr*_*ran 27

之前已回答过这个问题.不确定该解决方案是否是跨平台的,但它可以在Windows(NTFS文件系统)中完美运行.

with open("file.to.create", "wb") as out:
    out.truncate(1024 * 1024 * 1024)
Run Code Online (Sandbox Code Playgroud)

这个答案使用seekwrite:

with open("file.to.create", "wb") as out:
    out.seek((1024 * 1024 * 1024) - 1)
    out.write('\0')
Run Code Online (Sandbox Code Playgroud)

  • [文档:](http://docs.python.org/library/stdtypes.html#file-objects)_注意如果指定的大小超过文件的当前大小,则结果取决于平台:可能包括文件可能保持不变,增加到指定大小,就像零填充一样,或者使用未定义的新内容增加到指定大小._ (7认同)