特定のサイズ(たとえば1GiB)のファイルを作成したいと考えています。 内容は重要ではありません。特定のサイズのファイルをPythonで作成する
f = open("E:\\sample", "wb")
size = 1073741824 # bytes in 1 GiB
f.write("\0" * size)
しかし、これは仕上げに時間がかかりすぎる:私は何をやっている
です。それは私に約1分を費やします。 これを改善するために何ができますか?
特定のサイズ(たとえば1GiB)のファイルを作成したいと考えています。 内容は重要ではありません。特定のサイズのファイルをPythonで作成する
f = open("E:\\sample", "wb")
size = 1073741824 # bytes in 1 GiB
f.write("\0" * size)
しかし、これは仕上げに時間がかかりすぎる:私は何をやっている
です。それは私に約1分を費やします。 これを改善するために何ができますか?
警告このソリューションは、期待していない結果をもたらします。 UPDを参照してください...
1新しいファイルを作成します。
2サイズ-1バイトにシークします。
3書き込み1バイト。
4利益:)
f = open('newfile',"wb")
f.seek(1073741824-1)
f.write("\0")
f.close()
import os
os.stat("newfile").st_size
1073741824
UPD: はシークと切り捨てるの両方私のシステム(Linuxの+ ReiserFSの)上のスパースファイルを作成します。彼らは必要に応じてサイズがありますが、実際にはストレージデバイスのスペースを消費しません。だから、これは高速なスペース割り当てのための適切な解決策ではありません。私はちょうど25Gibフリーを持っている100Gibファイルを作成しましたが、まだ25Gibを無料で持っています。
cool、works fine – onemach
もしあなたのシステムがそれをサポートしていれば、このソリューションは必要ないかもしれないが、ここではこのファイルに対して1つのアロケーションブロックを消費するので、 'truncate()'ソリューションはより良くなるかもしれません。 – glglgl
それはスパースファイルを生成しませんか? – Arafangion
質問は前にansweredでした。ソリューションがクロスプラットフォームであるかどうかは不明ですが、Windows(NTFSファイルシステム)では完全に機能します。
with open("file.to.create", "wb") as out:
out.truncate(1024 * 1024 * 1024)
This answerseek
とwrite
を使用しています:
with open("file.to.create", "wb") as out:
out.seek((1024 * 1024 * 1024) - 1)
out.write('\0')
[Docs:](http://docs.python.org/library/stdtypes。html#file-objects)_指定されたサイズがファイルの現在のサイズを超えた場合、結果はプラットフォームに依存します:ファイルが変更されないままであるか、ゼロで埋められるかのように指定されたサイズに増加するか、サイズが定義されていない新しいコンテンツ._ –
@JanneKarilaこの場合、 'file.to.create'は空のファイルなので、指定されたサイズは常にファイルの現在のサイズを超えますか? – qed
@qedはいそうです。 –
1分は、それが私になると同じくらいいいですね。ところで、あなたはこのファイルで何をしていますか? –
1073741824バイト!= 1GB。機械式HDDではなくSSDを使用しますか?ネットワーク共有ではなくローカルディスクに書き込みますか? – Johnsyweb
@Johnsywebなぜですか?それは '1024 * 1024 * 1024'ですか? – onemach