home changes contents help options

141:ファイルの属性を変更する

アクセス時刻、更新時刻を変更する

ファイルを最後に参照した時刻、最後に修正した時刻を変更するには os.utime を用います。最後に参照した時刻、最後に更新した時刻をタプルで渡します。

import os
import time
atime = mtime = time.mktime(time.strptime('20090120', '%Y%m%d')) # 2009年1月20日のエポック秒
os.utime('foo.txt', (atime, mtime)) # 参照時刻、最終更新時刻を2009年1月20日に

なお None を渡すと両方とも現在時刻を指定したものとみなされます。

os.utime('foo.txt', None)

アクセスモードを変更する

ファイルのアクセスモードを変更するには os.chmod を使います。モードの指定には stat モジュールの定数を使用します。

import os
from stat import *

os.chmod('foo.txt', S_IRUSR) # 400 所有者の読み込み権限のみの指定
os.chmod('foo.txt', S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) # 644 各定数はビット演算で組み合わせることができる

指定できる定数として次のものが stat モジュールに定義されています。なお、 Windows では stat.IREAD, stat.IWRITE 以外のビットは無視されます。

S_IRUSR, S_IREAD
所有者の読み込み権限
S_IWUSR, S_IWRITHE
所有者の書き込み権限
S_IXUSR, S_IEXEC
所有者の実行権限
S_IRGRP
グループの読み込み権限
S_IWGRP
グループの書き込み権限
S_IXGRP
グループの実行権限
S_IROTH
他のユーザーの読み込み権限
S_IWOTH
他のユーザーの書き込み権限
S_IXOTH
他のユーザーの実行権限
S_IRWXU
所有者の読み書き実行権限
S_IRWXG
グループの読み書き実行権限
S_IRWXO
他のユーザーの読み書き実行権限
S_ISUID
setuid
S_ISGID
setgid
S_ENFMT
(System V) ファイル・ロックを強制
S_ISVTX
スティッキービット

なお、 644 といった直値での指定もできなくはありません。この場合 8 進リテラルを使うと直感的に書くことができます

os.chmod('foo.txt', 0644) # 0644 == S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH

所有者、グループを変更する

ファイルの所有者、グループを指定するには os.chown を使用します。いずれかの ID を変更しないときには -1 を代わりに入れます。なお、ユーザー名に対応するユーザーID 、グループID を求めるには pwd.getpwnam を用います。

import os
import pwd
bar = pwd.getpwnam('bar')
os.chown('foo.txt', bar.pw_uid, bar.pw_gid)

Windows のファイル属性を変更する

pywin32 の win32api.SetFileAttributes? を使用することでファイルの読み取り専用属性などを変更することができます。属性は win32con の定数を用いて指定します。

import win32api
import win32con
win32api.SetFileAttributes('foo.txt', win32con.FILE_ATTRIBUTE_READONLY) # 読み取り専用ファイルとする
win32api.SetFileAttributes('foo.txt', win32con.FILE_ATTRIBUTE_NORMAL) # 通常のファイルにもどす

指定できる定数には次のものがあります。 MSDN ライブラリの SetFileAttributes? も参照してみてください。

FILE_ATTRIBUTE_NORMAL
属性を特に指定しない
FILE_ATTRIBUTE_ARCHIVE
アーカイブファイルとする
FILE_ATTRIBUTE_HIDDEN
隠しファイルとする
FILE_ATTRIBUTE_READONLY
読み取り専用とする
FILE_ATTRIBUTE_SYSTEM
システムファイルとする
FILE_ATTRIBUTE_TEMPORARY
一時ファイルとする