ファイル・フォルダ操作 文法・環境

【python】ファイルを移動する方法【shutil、os】

pythonで、ファイルを移動させる方法について紹介します。

本記事では、下記の内容を紹介しています。

この記事で分かること

■ファイルを移動する方法【shutil、os】

  • shutilモジュールでファイルを移動【shutil.move】
  • 移動先に同名ファイルがある場合に上書き【shutil.move】
  • shutilモジュールを用いてファイルの移動&リネーム【shutil.move】
  • osモジュールを用いてファイルを移動【os.rename】
  • osモジュールを用いてファイルを移動【os.replace】

なお、本記事で紹介しているサンプルコードは、下記のディレクトリ構成で動作させています。

ディレクトリ構成

スポンサーリンク

ファイルを移動する方法【shutil、os】

python標準モジュールである、shutilモジュール、osモジュールを用いてファイルを移動する方法について、それぞれ順番に紹介します。

shutilモジュールでファイルを移動【shutil.move】

shutilモジュールの、shutil.moveを用いることでファイルを移動できます

shutil.moveの第一引数には「移動元のファイルパス」、第二引数には「移動先のファイルパス」を指定します。
返り値として、移動後のファイルパスが返されます。

shutil.moveの書き方

移動後のパス = shutil.move( 移動元のファイルパス, 移動先のパス )

以下、shutil.moveでファイルを移動するサンプルコードです。

### shutil.moveでファイルを移動する
import shutil
import os

print(os.listdir(r'test\folder1'))
# ['new_file.txt', 'new_folder']
print(os.listdir(r'test\folder2'))
# []

new_path = shutil.move(r'test\folder1\new_file.txt', r'test\folder2')

print(new_path)
# test\folder2\new_file.txt

print(os.listdir(r'test\folder1'))
# ['new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file.txt']

サンプルコードが長くなってしまいましたが、ファイルを移動しているのは、
new_path = shutil.move(r'test\folder1\new_file.txt', r'test\folder2')
の部分だけです。

os.listdirは、ディレクトリの中身を確認するために使用しています。

スポンサーリンク

移動先に同名ファイルがある場合に上書き【shutil.move】

補足的な内容ですが、移動先に同名ファイルがある場合に上書きする方法を紹介します。

ディレクトリ構成はこちらです。

移動先に同名ファイルがある場合

shutil.moveの第二引数に、ディレクトリのパスを指定した場合は、移動先に同名ファイルがあるとエラーとなります。

### 移動先に同名ファイルがある場合
import shutil
import os

print(os.listdir(r'test\folder1'))
# ['new_file.txt', 'new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file.txt']

new_path = shutil.move(r'test\folder1\new_file.txt', r'test\folder2')
# Error: Destination path 'test\folder2\new_file.txt' already exists

shutil.moveの第二引数に、ファイルのパスを指定した場合は、移動先に同名ファイルがあると上書きします。

### 移動先に同名ファイルがある場合
import shutil
import os

print(os.listdir(r'test\folder1'))
# ['new_file.txt', 'new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file.txt']

new_path = shutil.move(r'test\folder1\new_file.txt', r'test\folder2\new_file.txt')

print(new_path)
# test\folder2\new_file.txt

print(os.listdir(r'test\folder1'))
# ['new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file.txt']

shutilモジュールを用いてファイルの移動&リネーム【shutil.move】

補足的な内容になりますが、shutil.moveの第二引数に新規のファイルのパスを指定すると、ファイルを移動しリネームすることができます

以下、shutil.moveで、ファイルを移動しリネームするサンプルコードです。

### shutil.moveでファイルを移動しリネームする
import shutil
import os

print(os.listdir(r'test\folder1'))
# ['new_file.txt', 'new_folder']
print(os.listdir(r'test\folder2'))
# []

new_path = shutil.move(r'test\folder1\new_file.txt', r'test\folder2\new_file2.txt')

print(new_path)
# test\folder2\new_file2.txt

print(os.listdir(r'test\folder1'))
# ['new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file2.txt']

スポンサーリンク

osモジュールを用いてファイルを移動【os.rename】

次に、osモジュールを用いてファイルを移動する方法を紹介します。
osモジュールの、os.renameを用いることで、ファイルを移動できます。

os.renameの第一引数には移動元のファイルパスを指定し、第二引数には移動先のファイルパスを指定します。

os.renameの書き方

os.rename( 移動元のファイルパス, 移動先のファイルパス )

以下、os.renameを用いて、ファイルを移動するサンプルコードです。

### os.renameでファイルを移動
import os

print(os.listdir(r'test\folder1'))
# ['new_file.txt', 'new_folder']
print(os.listdir(r'test\folder2'))
# []

os.rename(r'test\folder1\new_file.txt', r'test\folder2\new_file.txt')

print(os.listdir(r'test\folder1'))
# ['new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file.txt']

osモジュールを用いてファイルを移動【os.replace】

osモジュールの、os.replaceを用いても、ファイルを移動できます

os.renameとの違いは、pythonの公式ドキュメントを参照ください。

以下、os.replaceを用いて、ファイルを移動するサンプルコードです。

### os.replaceでファイルを移動
import os

print(os.listdir(r'test\folder1'))
# ['new_file.txt', 'new_folder']
print(os.listdir(r'test\folder2'))
# []

os.replace(r'test\folder1\new_file.txt', r'test\folder2\new_file.txt')

print(os.listdir(r'test\folder1'))
# ['new_folder']
print(os.listdir(r'test\folder2'))
# ['new_file.txt']

スポンサーリンク

-ファイル・フォルダ操作, 文法・環境
-,