How to create a very large file cheaply using Python in Windows 7? [duplicate]

爷,独闯天下 提交于 2019-12-21 09:33:12

问题


Possible Duplicate:
Quickly create large file on a windows system?

For testing purposes, I would like to be able to create and delete very large files (several GB's). I have no need to write anything specific to them. They could be random data. Is there a way to generate a large file by simply allocating the space on disk? If not, what is the quickest way to write such a file? To create the file in a matter of a few seconds is desirable.

I need to do this within a Python script and am doing so on Windows 7.


回答1:


This should work on ntfs filesystems, since they support sparse files. It's almost instantaneous.

with open("file.to.create", "w") as file:
    file.truncate(10 ** 10)

The file will appearantly be filled with \x00 bytes, but those are in fact just created as needed when you read from the file. It uses almost no disk space (though it may look like it uses all 10 GB from the very beginning -- I've found no easy way to check the real file size in windows), and grows by allocating needed blocks when you write to it. AFAIK it's quite possible to create a sparse file that is much larger than the disk it resides on, though this may of course lead to trouble later on. :)

Beware: if you copy a sparse file, it may in the process expand to a non-sparse file (read "fake" \x00 bytes, write real \x00 bytes). This is a consequence of the fact that it looks just like an ordinary 10 GB file with null bytes in order to be "backward compatible" -- separate checks must be performed to reveal it as a sparse file. To successfully copy a sparse file and keep it a sparse file, two conditions must be met:

  • the tool used to copy it must be "aware" of sparse files, and
  • the filesystem it is copied to must support sparse files

For example, USB thumbdrives/pens are typically formatted with the old FAT filesystem by default, and it does not support sparse files. From testing, explorer of Windows XP appears not preserve sparse files when copying. This tip suggests Robocopy is up to the job, but I've not tested it.



来源:https://stackoverflow.com/questions/6497722/how-to-create-a-very-large-file-cheaply-using-python-in-windows-7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!