別のプロセスでまだダウンロード中のファイルのサイズを取得しようとしています。以下のコードを使用しました(ここで見つけました):
os.stat(filepath).st_blocks*512
ただし、ファイルの割り当てられたサイズも返します。最近の検査で、このソリューションの精度は、動作している OS に依存することがわかりました。現在、私のOSはext3ファイルシステムを備えたubuntu 12.04サーバーです。Pythonで実際のファイルサイズを見つける別の方法はありますか?
一部の Unix システム (Linux など) では、次の属性も使用できる場合があります。
- st_blocks - ファイルに割り当てられた 512 バイトのブロック数
- st_blksize - ファイルシステムのブロックサイズ
- st_rdev - inode デバイスの場合のデバイスのタイプ
- st_flags - ファイルのユーザー定義フラグ
あなたが望んでいるように見えるのはst_blocks * st_blksize
. これは、メンバーであるファイルの実際のサイズではないことに注意してください。st_size
ブロック数にブロック サイズを掛けると、実際のファイル サイズよりも大きくなります。
注:「 st_blocks - ファイルに割り当てられた 512 バイト ブロックの数」と表示されている場合、その数512
は実際にはシステムに依存します。POSIX仕様によると
stat構造体のst_blocksメンバーの単位は、POSIX.1-2008 では定義されていません。一部の実装では、512 バイトです。ファイルシステムごとに異なる場合があります。
属性が利用可能な場合st_block
、それが他の値であっても驚かないでください。
試す
os.stat(filepath).st_size
「ls -l」で表示される内容を返すようです
SO とは無関係に、ファイルのメタデータにアクセスできます。
metadata = os.stat(path_to_file)
metadata.st_size