tags:

views:

73

answers:

2

I need to create files of arbitrary size that contain no data. The are potentially quite large. While I could just loop through and write a single null character until I've reached the file size, that seems ugly.

with open(filename,'wb') as f:
   # what goes here?

What is the efficient, pythonic way to do this?

+9  A: 

You can seek to a specific position and write a byte, and the OS will magically make the rest of the file appear.

with open(filename, "wb") as f:
    f.seek(999999)
    f.write("\0")

You need to write at least one byte for this to work.

Greg Hewgill
And the filesystem needs to support sparse files
gnibbler
This still works if the filesystem doesn't support sparse files; in that case the OS will create a non-sparse file of the equivalent size.
Greg Hewgill
Yes of course, I for some reason imagined the question asked for a sparse file :)
gnibbler
Thanks!I didn't realize I could seek past the end of the file. This actually removes my need to write a "blank" the file in first place, since I can just write chunks to it in any order.
Daniel Von Fange
+6  A: 
with open('zero', 'w') as f:
    f.seek(999999999)
    f.write('\0')

Will create a sparse file if the OS supports it. The magic is that files created this way do not take any space (until you copy it elsewhere with a program that does not preserve holes)

Marco Mariani
Thank you Marco!
Daniel Von Fange