ファイル名・フォルダ名(ディレクトリ名)の変更方法
os.rename または os.replace 関数に 元のファイル名 と 新しいファイル名 を指定します。import os
os.rename(src='元のファイルパス', dst='新しいファイルパス')
os.replace(src='元のファイルパス', dst='新しいファイルパス')
- 対象のファイルが無い場合、エラー「FileNotFoundError」が発生します。
- 相対パスを指定した場合、カレントディレクトリを基準に変更されます。
import os
# oldname.txt を newname.txt に変更し、dir 配下に移動
os.rename(src='./oldname.txt', dst='./dir/newname.txt')
os.replace(src='./oldname.txt', dst='./dir/newname.txt')
- ./dir が無い場合、エラー「FileNotFoundError」が発生します。
os.rename と os.replace の違い
名前変更後に同名のファイルがあるとき、Windows と UNIX で挙動が異なります。 ファイル(フォルダを除く)の名前変更は os.replace を使用すると同じ結果になるため、推奨されます。ただし、Python バージョン 3.3 以降が必要です。フォルダを扱う場合はどちらの関数も結果が異なるため、注意が必要です。対象 | リネーム後 | Windows | UNIX |
---|---|---|---|
ファイル | 同名ファイル・フォルダがない | リネームされる | リネームされる |
ファイル | 同名ファイルがある | FileExistsError | 上書きされる |
ファイル | 同名フォルダがある | FileExistsError | IsADirectoryError |
フォルダ | 同名ファイル・フォルダがない | リネームされる | リネームされる |
フォルダ | 同名ファイルがある | FileExistsError | NotADirectoryError |
フォルダ | 同名フォルダがあり、中にファイルなし | FileExistsError | 上書きされる |
フォルダ | 同名フォルダがあり、中にファイルあり | FileExistsError | OSError |
対象 | リネーム後 | Windows | UNIX |
---|---|---|---|
ファイル | 同名ファイル・フォルダがない | リネームされる | リネームされる |
ファイル | 同名ファイルがある | 上書きされる | 上書きされる |
ファイル | 同名フォルダがある | PermissionError | IsADirectoryError |
フォルダ | 同名ファイル・フォルダがない | リネームされる | リネームされる |
フォルダ | 同名ファイルがある | 上書きされる | NotADirectoryError |
フォルダ | 同名フォルダがあり、中にファイルなし | PermissionError | 上書きされる |
フォルダ | 同名フォルダがあり、中にファイルあり | PermissionError | OSError |
検証環境
- Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32
- Python 3.9.7 (default, Sep 3 2021, 20:10:26) [GCC 10.2.1 20210110] on linux
- Docker image: python
- Docker Desktop 4.0.1(68347)
- Docker Engine 20.10.8
- Docker Compose v2.0.0-rc.3
- Microsoft Windows 10 Pro Version 21H1 OS Build 19043.1237 Experience: Windows Feature Experience Pack 120.2212.3530.0