stat モジュールでは、os.stat()、 os.lstat() および os.fstat() (存在すれば) の返す 内容を解釈するための定数や関数を定義しています。stat()、 fstat()、および lstat() の関数呼び出しについての 完全な記述はシステムのドキュメントを参照してください。
stat モジュールでは、特殊なファイル型を判別するための以下の 関数を定義しています:
| mode) |
| mode) |
| mode) |
| mode) |
| mode) |
| mode) |
| mode) |
より一般的なファイルのモードを操作するための二つの関数が定義されています:
| mode) |
| mode) |
通常、ファイルの形式を調べる場合には os.path.is*() 関数 を使うことになります; ここで挙げた関数は同じファイルに対して 複数のテストを同時に行いたいが、stat() システムコール を何度も呼び出してオーバヘッドが生じるのを避けたい場合に便利です。 これらはまた、ブロック型およびキャラクタ型デバイスに対するテスト のように、os.path で扱うことのできないファイルの 情報を調べる際にも便利です。
以下の全ての変数は、os.stat()、 os.fstat()、または os.lstat() が返す 10 要素のタプルにおけるインデクスを単に シンボル定数化したものです。
``ファイルサイズ'' の解釈はファイルの型によって異なります。 通常のファイルの場合、サイズはファイルの大きさをバイトで表した ものです。ほとんどの Unix 系 (特に Linux) における FIFO やソケット の場合、``サイズ'' は os.stat()、 os.fstat()、 あるいは os.lstat() を呼び出した時点で読み出し待ちであった データのバイト数になります; この値は時に有用で、特に上記の特殊なファイル を非ブロックモードで開いた後にポーリングを行いたいといった場合に 便利です。他のキャラクタ型およびブロック型デバイスにおけるサイズ フィーるの意味はさらに異なっていて、背後のシステムコールの実装に よります。
例を以下に示します:
import os, sys
from stat import *
def walktree(top, callback):
'''recursively descend the directory tree rooted at top,
calling the callback function for each regular file'''
for f in os.listdir(top):
pathname = os.path.join(top, f)
mode = os.stat(pathname)[ST_MODE]
if S_ISDIR(mode):
# It's a directory, recurse into it
walktree(pathname, callback)
elif S_ISREG(mode):
# It's a file, call the callback function
callback(pathname)
else:
# Unknown file type, print a message
print 'Skipping %s' % pathname
def visitfile(file):
print 'visiting', file
if __name__ == '__main__':
walktree(sys.argv[1], visitfile)