[Python] フォルダ名を変更する方法
Pythonでフォルダ名を変更するには、標準ライブラリのos
モジュールやpathlib
モジュールを使用します。
os.rename()関数
を使うと、既存のフォルダ名を新しい名前に変更できます。
例えば、os.rename('old_folder', 'new_folder')
のように記述します。
また、pathlib
モジュールを使う場合は、Path('old_folder').rename('new_folder')
とすることで同様の操作が可能です。
どちらもフォルダが存在しない場合や名前が重複する場合はエラーが発生します。
osモジュールを使ったフォルダ名の変更
Pythonのos
モジュールを使用すると、フォルダ名を簡単に変更することができます。
以下では、os.rename()関数
を中心に、フォルダ名変更の基本的な使い方やエラーハンドリングについて解説します。
os.rename()の基本的な使い方
os.rename()関数
は、指定したフォルダ名を新しい名前に変更するために使用します。
基本的な構文は以下の通りです。
import os
# フォルダ名を変更する
os.rename('古いフォルダ名', '新しいフォルダ名')
このコードを実行すると、指定したフォルダ名が変更されます。
フォルダが存在しない場合のエラーハンドリング
フォルダ名を変更する際、指定したフォルダが存在しない場合にはエラーが発生します。
このエラーを適切に処理するためには、try
とexcept
を使用します。
import os
try:
os.rename('存在しないフォルダ名', '新しいフォルダ名')
except FileNotFoundError:
print('指定したフォルダは存在しません。')
このコードでは、指定したフォルダが存在しない場合にエラーメッセージを表示します。
フォルダ名が重複している場合の対処法
新しいフォルダ名が既に存在する場合、os.rename()
はエラーを発生させます。
この場合も、エラーハンドリングを行うことが重要です。
import os
try:
os.rename('古いフォルダ名', '既存のフォルダ名')
except FileExistsError:
print('新しいフォルダ名は既に存在します。')
このコードでは、新しいフォルダ名が既に存在する場合にエラーメッセージを表示します。
フォルダのパスを絶対パスで指定する方法
フォルダ名を変更する際、絶対パスを使用することで、正確にフォルダを指定できます。
絶対パスは、ルートディレクトリからの完全なパスです。
import os
# 絶対パスを使用してフォルダ名を変更
os.rename('/path/to/古いフォルダ名', '/path/to/新しいフォルダ名')
このコードでは、指定した絶対パスのフォルダ名を変更します。
相対パスを使ったフォルダ名の変更
相対パスを使用することで、現在の作業ディレクトリからの相対的な位置を指定してフォルダ名を変更することも可能です。
import os
# 相対パスを使用してフォルダ名を変更
os.rename('相対パス/古いフォルダ名', '相対パス/新しいフォルダ名')
このコードでは、現在の作業ディレクトリからの相対パスを使用してフォルダ名を変更します。
os.rename()を使ったフォルダ名変更の実例
以下は、os.rename()
を使用してフォルダ名を変更する実際の例です。
import os
# フォルダ名を変更する
os.rename('test_folder', 'renamed_folder')
このコードを実行すると、test_folder
というフォルダがrenamed_folder
に変更されます。
# 出力結果
# フォルダ名が変更されます。特に出力はありませんが、フォルダ名が変更されます。
このように、os
モジュールを使用することで、Pythonで簡単にフォルダ名を変更することができます。
pathlibモジュールを使ったフォルダ名の変更
Pythonのpathlib
モジュールは、ファイルシステムのパスをオブジェクト指向で扱うための便利なツールです。
フォルダ名の変更も簡単に行うことができます。
以下では、pathlib.Path.rename()
を中心に、フォルダ名変更の基本的な使い方やエラーハンドリングについて解説します。
pathlib.Path.rename()の基本的な使い方
pathlib
を使用する場合、Path
オブジェクトを作成し、そのrename()メソッド
を使用してフォルダ名を変更します。
基本的な構文は以下の通りです。
from pathlib import Path
# フォルダ名を変更する
old_folder = Path('古いフォルダ名')
new_folder = Path('新しいフォルダ名')
old_folder.rename(new_folder)
このコードを実行すると、指定したフォルダ名が変更されます。
pathlibを使うメリットとデメリット
メリット | デメリット |
---|---|
オブジェクト指向で扱いやすい | Python 3.4以降でしか使用不可 |
パスの操作が直感的 | 古いコードとの互換性が低い |
クロスプラットフォーム対応 | 学習コストがやや高い |
pathlib
は、パスの操作をより直感的に行えるため、特に新しいプロジェクトでの使用が推奨されます。
フォルダが存在しない場合のエラーハンドリング
フォルダ名を変更する際、指定したフォルダが存在しない場合にはエラーが発生します。
このエラーを適切に処理するためには、try
とexcept
を使用します。
from pathlib import Path
old_folder = Path('存在しないフォルダ名')
new_folder = Path('新しいフォルダ名')
try:
old_folder.rename(new_folder)
except FileNotFoundError:
print('指定したフォルダは存在しません。')
このコードでは、指定したフォルダが存在しない場合にエラーメッセージを表示します。
フォルダ名が重複している場合の対処法
新しいフォルダ名が既に存在する場合、rename()メソッド
はエラーを発生させます。
この場合も、エラーハンドリングを行うことが重要です。
from pathlib import Path
old_folder = Path('古いフォルダ名')
new_folder = Path('既存のフォルダ名')
try:
old_folder.rename(new_folder)
except FileExistsError:
print('新しいフォルダ名は既に存在します。')
このコードでは、新しいフォルダ名が既に存在する場合にエラーメッセージを表示します。
pathlibを使ったフォルダ名変更の実例
以下は、pathlib
を使用してフォルダ名を変更する実際の例です。
from pathlib import Path
# フォルダ名を変更する
old_folder = Path('test_folder')
new_folder = Path('renamed_folder')
old_folder.rename(new_folder)
このコードを実行すると、test_folder
というフォルダがrenamed_folder
に変更されます。
# 出力結果
# フォルダ名が変更されます。特に出力はありませんが、フォルダ名が変更されます。
このように、pathlib
モジュールを使用することで、Pythonで簡単にフォルダ名を変更することができます。
フォルダ名変更時の注意点
フォルダ名を変更する際には、いくつかの注意点があります。
これらの注意点を理解しておくことで、エラーを未然に防ぎ、スムーズに作業を進めることができます。
以下では、フォルダ名変更時の主な注意点について解説します。
フォルダが使用中の場合の挙動
フォルダが他のプロセスによって使用中の場合、フォルダ名を変更しようとするとエラーが発生します。
特に、ファイルエクスプローラーやターミナルでそのフォルダが開かれていると、変更ができないことがあります。
import os
try:
os.rename('使用中のフォルダ', '新しいフォルダ名')
except PermissionError:
print('フォルダが使用中のため、変更できません。')
このコードでは、フォルダが使用中の場合にエラーメッセージを表示します。
権限がない場合のエラーハンドリング
フォルダ名を変更する際、権限が不足している場合にもエラーが発生します。
特に、システムフォルダや他のユーザーが所有するフォルダに対して変更を試みると、PermissionError
が発生します。
import os
try:
os.rename('/path/to/権限のないフォルダ', '/path/to/新しいフォルダ名')
except PermissionError:
print('権限がないため、フォルダ名を変更できません。')
このコードでは、権限がない場合にエラーメッセージを表示します。
フォルダ名に特殊文字が含まれている場合の対処法
フォルダ名に特殊文字(例:/
, \
, :
, *
, ?
, "
, <
, >
, |
)が含まれている場合、エラーが発生することがあります。
これらの文字は、ファイルシステムによって特別な意味を持つため、使用を避けるべきです。
import os
folder_name = '不正な/フォルダ名'
# 特殊文字を含むフォルダ名を変更しようとするとエラーが発生する
try:
os.rename(folder_name, '新しいフォルダ名')
except OSError as e:
print(f'エラーが発生しました: {e}')
このコードでは、特殊文字を含むフォルダ名を変更しようとした際にエラーメッセージを表示します。
大文字・小文字の違いによる問題
ファイルシステムによっては、大文字と小文字を区別する場合としない場合があります。
特に、LinuxやmacOSでは大文字と小文字が区別されますが、Windowsでは区別されないことが一般的です。
このため、フォルダ名を変更する際には、大文字・小文字の違いに注意が必要です。
import os
# Windowsでは大文字と小文字が区別されないため、エラーが発生しない
os.rename('フォルダ名', 'フォルダ名') # これは問題ないが、意図しない動作を引き起こす可能性がある
# LinuxやmacOSでは、以下のように異なる名前として扱われる
os.rename('フォルダ名', 'フォルダ名') # これはエラーになる可能性がある
このように、大文字・小文字の違いによる問題を理解しておくことが重要です。
特に、異なるオペレーティングシステム間で作業を行う場合には、注意が必要です。
応用例:フォルダ名を一括で変更する
フォルダ名を一括で変更することは、特に多くのフォルダを管理する際に非常に便利です。
ここでは、os
モジュールとpathlib
モジュールを使用した一括変更の方法や、特定のパターンを含むフォルダ名の変更、日付やタイムスタンプを追加する方法について解説します。
osモジュールを使ったフォルダ名の一括変更
os
モジュールを使用して、特定のディレクトリ内のすべてのフォルダ名を一括で変更することができます。
以下のコードは、指定したディレクトリ内のすべてのフォルダ名に接頭辞を追加する例です。
import os
# 一括変更するフォルダがあるディレクトリ
directory = 'target_directory'
# ディレクトリ内のすべてのフォルダ名を変更
for folder_name in os.listdir(directory):
old_folder_path = os.path.join(directory, folder_name)
if os.path.isdir(old_folder_path): # フォルダのみ対象
new_folder_name = 'prefix_' + folder_name
new_folder_path = os.path.join(directory, new_folder_name)
os.rename(old_folder_path, new_folder_path)
このコードを実行すると、target_directory
内のすべてのフォルダ名にprefix_
が追加されます。
pathlibモジュールを使ったフォルダ名の一括変更
pathlib
モジュールを使用しても、同様にフォルダ名を一括で変更することができます。
以下のコードは、指定したディレクトリ内のすべてのフォルダ名に接尾辞を追加する例です。
from pathlib import Path
# 一括変更するフォルダがあるディレクトリ
directory = Path('target_directory')
# ディレクトリ内のすべてのフォルダ名を変更
for folder in directory.iterdir():
if folder.is_dir(): # フォルダのみ対象
new_folder = folder.with_name(folder.name + '_suffix')
folder.rename(new_folder)
このコードを実行すると、target_directory
内のすべてのフォルダ名に_suffix
が追加されます。
フォルダ名に特定のパターンを含む場合の変更
特定のパターンを含むフォルダ名を変更することも可能です。
以下のコードは、フォルダ名にold
が含まれる場合にnew
に変更する例です。
import os
# 一括変更するフォルダがあるディレクトリ
directory = 'target_directory'
# フォルダ名に特定のパターンを含む場合の変更
for folder_name in os.listdir(directory):
old_folder_path = os.path.join(directory, folder_name)
if os.path.isdir(old_folder_path) and 'old' in folder_name:
new_folder_name = folder_name.replace('old', 'new')
new_folder_path = os.path.join(directory, new_folder_name)
os.rename(old_folder_path, new_folder_path)
このコードを実行すると、target_directory
内のフォルダ名にold
が含まれる場合、new
に置き換えられます。
フォルダ名に日付やタイムスタンプを追加する方法
フォルダ名に日付やタイムスタンプを追加することで、整理しやすくすることができます。
以下のコードは、フォルダ名に現在の日付を追加する例です。
import os
from datetime import datetime
# 一括変更するフォルダがあるディレクトリ
directory = 'target_directory'
current_date = datetime.now().strftime('%Y%m%d') # 日付を取得
# フォルダ名に日付を追加
for folder_name in os.listdir(directory):
old_folder_path = os.path.join(directory, folder_name)
if os.path.isdir(old_folder_path):
new_folder_name = f"{folder_name}_{current_date}"
new_folder_path = os.path.join(directory, new_folder_name)
os.rename(old_folder_path, new_folder_path)
このコードを実行すると、target_directory
内のすべてのフォルダ名に現在の日付が追加されます。
このように、os
モジュールやpathlib
モジュールを使用することで、フォルダ名を一括で変更することができ、効率的にフォルダを管理することが可能です。
応用例:サブフォルダの名前を再帰的に変更する
サブフォルダの名前を再帰的に変更することは、特に多層構造のフォルダを管理する際に非常に便利です。
ここでは、os.walk()
とpathlib.rglob()
を使用した再帰的なフォルダ名変更の方法、そして再帰的な変更時の注意点について解説します。
os.walk()を使った再帰的なフォルダ名変更
os.walk()
を使用すると、指定したディレクトリ内のすべてのサブフォルダを再帰的に探索し、フォルダ名を変更することができます。
以下のコードは、すべてのサブフォルダ名に接頭辞を追加する例です。
import os
# 再帰的にフォルダ名を変更するディレクトリ
directory = 'target_directory'
# os.walk()を使って再帰的にフォルダ名を変更
for root, dirs, files in os.walk(directory):
for folder_name in dirs:
old_folder_path = os.path.join(root, folder_name)
new_folder_name = 'prefix_' + folder_name
new_folder_path = os.path.join(root, new_folder_name)
os.rename(old_folder_path, new_folder_path)
このコードを実行すると、target_directory
内のすべてのサブフォルダ名にprefix_
が追加されます。
pathlib.rglob()を使った再帰的なフォルダ名変更
pathlib
モジュールのrglob()メソッド
を使用することで、特定のパターンにマッチするすべてのフォルダを再帰的に探索し、フォルダ名を変更することができます。
以下のコードは、すべてのサブフォルダ名に接尾辞を追加する例です。
from pathlib import Path
# 再帰的にフォルダ名を変更するディレクトリ
directory = Path('target_directory')
# pathlib.rglob()を使って再帰的にフォルダ名を変更
for folder in directory.rglob('*'):
if folder.is_dir(): # フォルダのみ対象
new_folder = folder.with_name(folder.name + '_suffix')
folder.rename(new_folder)
このコードを実行すると、target_directory
内のすべてのサブフォルダ名に_suffix
が追加されます。
再帰的なフォルダ名変更時の注意点
再帰的にフォルダ名を変更する際には、いくつかの注意点があります。
以下に主な注意点を示します。
注意点 | 説明 |
---|---|
フォルダ名の重複 | 同じ名前のフォルダが存在する場合、エラーが発生する可能性があります。 |
フォルダの使用中 | フォルダが他のプロセスによって使用中の場合、変更できないことがあります。 |
権限の問題 | フォルダに対する権限が不足している場合、エラーが発生します。 |
再帰的な変更の順序 | フォルダ名を変更する順序によっては、意図しない動作を引き起こす可能性があります。 |
これらの注意点を理解し、適切にエラーハンドリングを行うことで、再帰的なフォルダ名変更を安全に行うことができます。
特に、フォルダ名の重複や権限の問題には注意が必要です。
応用例:フォルダ名を条件付きで変更する
フォルダ名を条件付きで変更することは、特定のニーズに応じてフォルダを整理するのに非常に役立ちます。
ここでは、フォルダ名に特定の文字列が含まれる場合の変更、フォルダの作成日時や更新日時に基づく変更、フォルダのサイズに基づく変更について解説します。
フォルダ名に特定の文字列が含まれる場合の変更
特定の文字列が含まれるフォルダ名を変更することができます。
以下のコードは、フォルダ名にold
が含まれる場合にnew
に変更する例です。
import os
# 一括変更するフォルダがあるディレクトリ
directory = 'target_directory'
# フォルダ名に特定の文字列が含まれる場合の変更
for folder_name in os.listdir(directory):
old_folder_path = os.path.join(directory, folder_name)
if os.path.isdir(old_folder_path) and 'old' in folder_name:
new_folder_name = folder_name.replace('old', 'new')
new_folder_path = os.path.join(directory, new_folder_name)
os.rename(old_folder_path, new_folder_path)
このコードを実行すると、target_directory
内のフォルダ名にold
が含まれる場合、new
に置き換えられます。
フォルダの作成日時や更新日時に基づく変更
フォルダの作成日時や更新日時に基づいてフォルダ名を変更することも可能です。
以下のコードは、フォルダの作成日時を取得し、その日時をフォルダ名に追加する例です。
import os
import time
# 一括変更するフォルダがあるディレクトリ
directory = 'target_directory'
# フォルダの作成日時に基づく変更
for folder_name in os.listdir(directory):
folder_path = os.path.join(directory, folder_name)
if os.path.isdir(folder_path):
# フォルダの作成日時を取得
creation_time = os.path.getctime(folder_path)
creation_time_str = time.strftime('%Y%m%d', time.localtime(creation_time))
new_folder_name = f"{folder_name}_{creation_time_str}"
new_folder_path = os.path.join(directory, new_folder_name)
os.rename(folder_path, new_folder_path)
このコードを実行すると、target_directory
内のすべてのフォルダ名に作成日時が追加されます。
フォルダのサイズに基づく変更
フォルダのサイズに基づいてフォルダ名を変更することもできます。
以下のコードは、フォルダのサイズが特定の閾値を超える場合に、フォルダ名にlarge_
を追加する例です。
import os
# 一括変更するフォルダがあるディレクトリ
directory = 'target_directory'
size_threshold = 1024 * 1024 # 1MB
# フォルダのサイズに基づく変更
for folder_name in os.listdir(directory):
folder_path = os.path.join(directory, folder_name)
if os.path.isdir(folder_path):
# フォルダのサイズを計算
total_size = sum(os.path.getsize(os.path.join(folder_path, f)) for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f)))
if total_size > size_threshold:
new_folder_name = 'large_' + folder_name
new_folder_path = os.path.join(directory, new_folder_name)
os.rename(folder_path, new_folder_path)
このコードを実行すると、target_directory
内のフォルダのサイズが1MBを超える場合、そのフォルダ名にlarge_
が追加されます。
このように、フォルダ名を条件付きで変更することで、フォルダの整理や管理がより効率的に行えるようになります。
特定の条件に基づいてフォルダ名を変更することで、必要な情報をすぐに把握できるようになります。
まとめ
この記事では、Pythonを使用してフォルダ名を変更する方法について詳しく解説しました。
os
モジュールやpathlib
モジュールを活用することで、フォルダ名の変更を簡単に行うことができ、さらに一括変更や条件付き変更、再帰的な変更の方法についても触れました。
これらの知識を活かして、フォルダの整理や管理を効率的に行うことができるでしょう。
ぜひ、実際にコードを試してみて、フォルダ名変更のスキルを身につけてください。