create file of particular size in python

Question:

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?

Asked By: onemach

||

Answers:

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.

Answered By: Shamanu4

The question has been answered before. Not sure whether the solution is cross platform, but it works in Windows (NTFS file system) flawlessly.

with open("file.to.create", "wb") as out:
    out.truncate(1024 * 1024 * 1024)

This answer uses seek and write:

with open("file.to.create", "wb") as out:
    out.seek((1024 * 1024 * 1024) - 1)
    out.write('')
Answered By: Imran
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.