我想创建一个特定大小的文件(比如1GiB)。 内容并不重要,因为我会填写内容。
我在做的是:
f = open("E:\\sample", "wb")
size = 1073741824 # bytes in 1 GiB
f.write("\0" * size)
但这需要很长时间才能完成。它花了我大约1分钟。 可以做些什么来改善这个?
答案 0 :(得分:36)
警告此解决方案会提供您可能不会期望的结果。见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
<强> UPD:强> 查找并截断两者都会在我的系统上创建稀疏文件(Linux + ReiserFS)。它们具有所需的大小但实际上不占用存储设备上的空间。因此,这不适合快速空间分配。我刚刚创建了只有25Gib的100Gib文件,结果仍然有25Gib免费。
次要更新:
为{3}添加了b
前缀以兼容Py3。
答案 1 :(得分:24)
之前的问题是answered。不确定解决方案是否是跨平台的,但它可以在Windows(NTFS文件系统)中完美运行。
with open("file.to.create", "wb") as out:
out.truncate(1024 * 1024 * 1024)
This answer使用seek
和write
:
with open("file.to.create", "wb") as out:
out.seek((1024 * 1024 * 1024) - 1)
out.write('\0')
答案 2 :(得分:2)
正如Arafangion用户在评论中提到的那样,到目前为止提供的答案会生成sparse files。要在python中生成一个非稀疏文件(实际上会占用所需的磁盘空间),我使用了this其他答案中的以下代码:
import os
file_name = 'test_file'
file_size = 1024 # size in bytes
with open(file_name, "wb") as f:
f.write(os.urandom(file_size))
要使用命令ls -lhs
和du -h <filename>
检查Linux中文件是否稀疏,请将ls -lhs
的第一列与du -h
的输出进行比较,如果文件不同,则稀疏:
$ ls -lhs
185548 -rw-r--r-- 1 root root 181.2M Nov 6 22:23 test
$du -h test
182M test
在上面的示例中,test
是一个稀疏文件。