pythonで、ディレクトリを移動する方法について紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
■ディレクトリを移動する方法【shutil】
- shutilモジュールでディレクトリを移動【shutil.move】
- shutilモジュールを用いてディレクトリの移動&リネーム【shutil.move】
なお、本記事で紹介しているサンプルコードは、下記のディレクトリ構成で動作させています。

スポンサーリンク
■ディレクトリ(フォルダ)を移動する方法【shutil】
pythonの標準モジュールである「shutilモジュール」を用いて、ディレクトリを移動する方法について紹介します。
shutilモジュールの、shutil.moveを使用することで、ディレクトリを移動することができます。
以降では、サンプルコードを交えながら、ディレクトリの移動方法について紹介します。
shutilモジュールでディレクトリを移動【shutil.move】
shutilモジュールの、shutil.moveを用いることでディレクトリを移動できます。
また、ディレクトリは中身ごと移動できます。
shutil.moveの第一引数には「移動元のパス」、第二引数には「移動先のパス」を指定します。
返り値として、移動後のパスが返されます。
shutil.moveの書き方
移動後のパス = shutil.move( 移動元のパス, 移動先のパス )
以下、shutil.moveでディレクトリを移動するサンプルコードです。
### shutilモジュールでディレクトリを移動
import shutil
import glob
import pprint
pprint.pprint(glob.glob(r'test\folder1\**\*', recursive=True))
# ['test\\folder1\\new_folder', 'test\\folder1\\new_folder\\new_file.txt']
pprint.pprint(glob.glob(r'test\folder2\**\*', recursive=True))
# []
new_path = shutil.move('test/folder1/new_folder', 'test/folder2')
pprint.pprint(glob.glob(r'test\folder1\**\*', recursive=True))
# []
pprint.pprint(glob.glob(r'test\folder2\**\*', recursive=True))
# ['test\\folder2\\new_folder', 'test\\folder2\\new_folder\\new_file.txt']
コードが多少見にくくなってしまっていますが、ディレクトリを移動させているコードは1行だけです。
new_path = shutil.move('test/folder1/new_folder', 'test/folder2')
> pprint.pprint(glob.glob(r'test\folder1\**\*', recursive=True))
globモジュールを用いて、folder1より深い階層のファイル・ディレクトリの一覧を再帰的に取得しています。
globモジュールを用いたファイル・フォルダの一覧取得については、下記の記事で紹介しています。
なお、移動先に同じ名前のディレクトリがある場合は、「すでに同名のディレクトリが存在する」旨のエラーが発生します。
スポンサーリンク
shutilモジュールを用いてディレクトリの移動&リネーム【shutil.move】
補足的な内容になりますが、shutil.moveの第二引数に新規のディレクトリのパスを指定すると、ディレクトリを移動しリネームすることができます。
以下、shutilモジュールでディレクトリを移動し、リネームするサンプルコードです。
### shutilモジュールでディレクトリを移動&リネーム
import shutil
import glob
import pprint
pprint.pprint(glob.glob(r'test\folder1\**\*', recursive=True))
# ['test\\folder1\\new_folder', 'test\\folder1\\new_folder\\new_file.txt']
pprint.pprint(glob.glob(r'test\folder2\**\*', recursive=True))
# []
new_path = shutil.move('test/folder1/new_folder', 'test/folder2/new_folder2')
pprint.pprint(glob.glob(r'test\folder1\**\*', recursive=True))
# []
pprint.pprint(glob.glob(r'test\folder2\**\*', recursive=True))
# ['test\\folder2\\new_folder2', 'test\\folder2\\new_folder2\\new_file.txt']
ディレクトリが移動したうえで、リネームされています。
スポンサーリンク
まとめ
pythonで、shutil.moveを用いてディレクトリを移動する方法について紹介しました。
関連記事として、ファイルを移動する方法について下記記事で紹介しているので、併せて確認してみてください。
スポンサーリンク