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

时间:2012-01-11 08:09:24

标签: python file

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

我在做的是:

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

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

3 个答案:

答案 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使用seekwrite

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 -lhsdu -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是一个稀疏文件。