2

別のプロセスでまだダウンロード中のファイルのサイズを取得しようとしています。以下のコードを使用しました(ここで見つけました):

os.stat(filepath).st_blocks*512

ただし、ファイルの割り当てられたサイズも返します。最近の検査で、このソリューションの精度は、動作している OS に依存することがわかりました。現在、私のOSはext3ファイルシステムを備えたubuntu 12.04サーバーです。Pythonで実際のファイルサイズを見つける別の方法はありますか?

4

3 に答える 3

6

ドキュメントからstat():

一部の 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、それが他の値であっても驚かないでください。

于 2012-10-18T10:43:08.317 に答える
1

試す

os.stat(filepath).st_size

「ls -l」で表示される内容を返すようです

于 2012-10-18T08:53:46.417 に答える
0

SO とは無関係に、ファイルのメタデータにアクセスできます。

metadata = os.stat(path_to_file)
metadata.st_size
于 2012-10-18T08:54:01.737 に答える