Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
790 views
in Technique[技术] by (71.8m points)

create file of particular size in python

I want to create a file of particular size (say, 1GiB). The content is not important since I will fill stuff into it.

What I am doing is:

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

But this takes too long to finish. It spends me roughly 1 minute. What can be done to improve this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

WARNING This solution gives the result that you might not expect. See UPD ...

1 Create new file.

2 seek to size-1 byte.

3 write 1 byte.

4 profit :)

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

1073741824

UPD: Seek and truncate both create sparse files on my system (Linux + ReiserFS). They have size as needed but don't consume space on storage device in fact. So this can not be proper solution for fast space allocation. I have just created 100Gib file having only 25Gib free and still have 25Gib free in result.

Minor Update: Added b prefix to f.write("") for Py3 compatibility.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...