os.rename / os.renames 関数
os.rename 関数 を使用して、ファイルやディレクトリの名前を変更することができます。
次の例では、src.txt
という名前のファイルを dst.txt
という名前にリネームしています。
import os
try:
os.rename('src.txt', 'dst.txt')
except Exception as e:
print('Error: {0}'.format(e), file=sys.stderr)
os.rename
関数は次のようなエラーを発生させる可能性があります。
通常の使用時にも発生し得るものなので、エラーハンドル処理はちゃんと記述しておくことをお勧めします。
FileExistsError
… Windows でdst
がすでに存在する場合。IsADirectoryError
… Unix で、src
がファイルでdst
が(存在する)ディレクトリの場合。NotADirectoryError
… Unix で、src
がディレクトリでdst
が(存在する)ファイルの場合。OSError
… Unix で、src
がディレクトリでdst
が(存在する)ディレクトリで、かつ、dst
が空でない場合。dst
が空のディレクトリであれば、dst
へのリネームは成功します(dst
にsrc
の中身が移動した状態になる)。
深いディレクトリ階層にファイルを移動させたいときは、os.renames 関数 を使うのが便利です。
os.renames
関数は、移動先のディレクトリが存在しない場合に自動的に作成してくれます。
os.renames("src.txt", "aaa/bbb/ccc/dst.txt")
上記のようにすると、aaa/bbb/ccc
というディレクトリ階層を作ってからファイルを移動してくれます。
os.renames
ではなく、os.rename
を使用した場合は、aaa/bbb/ccc
というディレクトリが存在しないときにエラーになります。
例: ファイル名のプレフィックスに日付 (’-YYYYMMDD’) を付加する
下記のサンプルスクリプトは、ディレクトリ内のすべての .png
ファイルのファイル名を変更し、拡張子の前に -20071109
のような日付を表す文字列を挿入します。
例えば、sample.png
というファイル名は sample-20071109.png
というファイル名に置換されます。