8.14 標準モジュール stat

 

statモジュールはos.stat()os.lstat()(もしあれば) の結果を翻訳するための定数と関数を定義しています。 os.stat()os.lstat()システムコールに関する詳細はmanページを 参照して下さい。

statモジュールは以下の関数を定義しています。

S_ISDIR (mode)
modeがディレクトリから取得されていれば0以外を返します。

S_ISCHR (mode)
modeがキャラクタスペシャルデバイスから取得されていれば0以外を返します。

S_ISBLK (mode)
modeがブロックスペシャルデバイスから取得されていれば0以外を返します。

S_ISREG (mode)
modeがレギュラーファイルから取得されていれば0以外を返します。

S_ISFIFO (mode)
modeがFIFOから取得されていれば0以外を返します。

S_ISLNK (mode)
modeがシンボリックリンクから取得されていれば0以外を返します。

S_ISSOCK (mode)
modeがソケットから取得されていれば0以外を返します。

以下のすべてのデータアイテムは、os.stat()またはos.lstat() が返す10個の要素を持つタプルに対するシンボリックで単純なインデックスです。

ST_MODE
iノード保護モード

ST_INO
iノード番号

ST_DEV
デバイスのiノード

ST_NLINK
iノードに対するリンク数

ST_UID
所有者のユーザid

ST_GID
所有者のグループid

ST_SIZE
バイト単位でのファイルサイズ

ST_ATIME
最後にアクセスがあった時間

ST_MTIME
Time of last modification. 最後に変更があった時間

ST_CTIME
最後に状態が変わった(詳細はmanページ参照)時間

Example:

import os, sys
from stat import *

def process(dir, func):
    '''dirをルートとしたディレクトリを下に再帰的にたどり、
       各レギュラーファイルに対してfuncを呼び出す。'''

    for f in os.listdir(dir):
        mode = os.stat('%s/%s' % (dir, f))[ST_MODE]
        if S_ISDIR(mode):
            # ディレクトリに入り再帰的に処理
            process('%s/%s' % (dir, f), func)
        elif S_ISREG(mode):
            func('%s/%s' % (dir, f))
        else:
            print 'Skipping %s/%s' % (dir, f)

def f(file):
    print 'frobbed', file

if __name__ == '__main__': process(sys.argv[1], f)

guido@python.org