home changes contents help options

138:ファイルが読み書き可能か調べる

os.access で確認

ファイルが読み書き可能かどうか確認するには os.access 関数を用います。 引数には確認したいファイル名とフラグ(os モジュールに定数が用意されています) を与えます。

ファイルが読み込み可能かどうか確認します。 os.R_OK を指定します。

os.access('file_name', os.R_OK)

ファイルが書き込み可能かどうか確認します。 os.W_OK を指定します。

os.access('file_name', os.W_OK)

フラグは論理和をとることで複数指定可能です。 ファイルが読み書き可能であるかどうかを確認するには次のようにします。

os.access('file_name', os.R_OK | os.W_OK)

また、その他のフラグとしてファイルの存在確認用の os.F_OK 、ファイルの実行可否確認用の os.X_OK があります。

おまけ:パーミッションの確認

ファイルのパーミッションは os.stat (もしくは os.lstat) 関数で得た値の st_mode 属性と フラグとの論理積で判断します。 パーミッションが 750 (rwxr-x---) のファイル foo.py があるものとして、例を挙げます。

>>> stat_result = os.stat('foo.py')
>>> mode = stat_result.st_mode
>>> if mode & stat.S_IRUSR: # 所有者は読める
...   print 'user readable'
...
user readable
>>> if mode & stat.S_IRGRP: # グループユーザーは読める
...   print 'group readable'
...
group readable
>>> if mode & stat.S_IROTH: # その他のユーザーは読めない
...   print 'other readable'
...
>>>

フラグとして用いるための定数は stat モジュールで定義されています。この命名規則は以下のようになっています。

  1. S_I から始まる。
  2. 次に読み込み権限の確認なら R 、書き込み権限の確認なら W 、実行権限の確認なら X の文字が続く。
  3. 所有者における確認なら USR 、グループの確認なら GRP 、その他ユーザーの確認なら OTH が続く。

たとえば、その他のユーザーの実行権限を確認するときにつかう定数は stat.S_IXOTH です。