Pythonで「ファイル移動」を完全に理解する
ファイル移動は、業務自動化の中でも特に使用頻度が高い操作です。
「処理済みフォルダへ移動する」「エラーになったファイルだけ別フォルダに隔離する」「日付ごとにフォルダを整理する」──こうした作業はすべてファイル移動の応用です。
Pythonでは shutil.move() を使うことで、直感的かつ安全にファイル移動ができます。
ここでは、初心者でも迷わないように、仕組みから実務テンプレートまで丁寧に解説します。
shutil.move の基本を理解する
shutil.move とは何をしているのか
shutil.move(src, dst) は、ファイルまたはフォルダを「移動」する関数です。
実は内部的には「コピーしてから削除する」動作をする場合もあり、OSによって挙動が少し異なります。
移動の基本形は次のとおりです。
import shutil
shutil.move("data/report.txt", "processed/report.txt")
Pythonこの一行で、data/report.txt が processed/report.txt に移動します。
src と dst の意味を深掘りする
dst が「フォルダ」か「ファイル名」かで挙動が変わる
shutil.move の第二引数 dst は、次の2パターンで動作が変わります。
dst が「既存のフォルダ」の場合
shutil.move("data/report.txt", "processed")
Pythonこの場合は、processed/report.txt というファイルが作られます。
つまり、元のファイル名がそのまま使われます。
dst が「ファイルパス」の場合
shutil.move("data/report.txt", "processed/report_2024.txt")
Pythonこの場合は、指定したファイル名で移動されます。
フォルダが存在しないとエラーになる理由
移動先のフォルダが存在しない場合、shutil.move はフォルダを自動生成しません。
そのため、業務自動化では「移動前にフォルダを作る」ことが必須になります。
import os
import shutil
src = "data/report.txt"
dst_dir = "processed"
dst = os.path.join(dst_dir, "report.txt")
os.makedirs(dst_dir, exist_ok=True)
shutil.move(src, dst)
Pythonos.makedirs(..., exist_ok=True) を使うことで、フォルダがなければ作り、あれば何もしないという安全な動作になります。
例題①:処理済みファイルを「processed」フォルダへ移動する
シナリオ
inbox フォルダに入っているファイルを処理し、処理が終わったら processed フォルダへ移動する。
これは業務自動化で最もよくあるパターンです。
コード例
import os
import shutil
src_dir = "inbox"
dst_dir = "processed"
os.makedirs(dst_dir, exist_ok=True)
for name in os.listdir(src_dir):
src_path = os.path.join(src_dir, name)
if not os.path.isfile(src_path):
continue
dst_path = os.path.join(dst_dir, name)
shutil.move(src_path, dst_path)
print("移動:", src_path, "→", dst_path)
Pythonこのテンプレートは、実務でそのまま使えるレベルです。
例題②:エラーになったファイルだけ「error」フォルダに隔離する
シナリオ
処理中にエラーが起きたファイルを別フォルダに移動しておくと、後で原因調査がしやすくなります。
コード例
import os
import shutil
src = "data/input.csv"
dst_dir = "error"
try:
# ここで何らかの処理を行う
raise ValueError("テスト用エラー")
except Exception as e:
os.makedirs(dst_dir, exist_ok=True)
dst = os.path.join(dst_dir, os.path.basename(src))
shutil.move(src, dst)
print("エラーのため移動:", dst)
Pythonこのように「例外処理」と組み合わせることで、業務自動化の信頼性が一気に高まります。
例題③:日付ごとにフォルダを作って整理する
シナリオ
毎日生成されるファイルを、日付フォルダに自動で整理したい。
コード例
import os
import shutil
from datetime import date
today = date.today().strftime("%Y-%m-%d")
src = "data/report.csv"
dst_dir = os.path.join("archive", today)
dst = os.path.join(dst_dir, "report.csv")
os.makedirs(dst_dir, exist_ok=True)
shutil.move(src, dst)
print("日付フォルダへ移動:", dst)
Pythonこのテンプレートは、バックアップ・整理・アーカイブなど幅広く応用できます。
shutil.move の注意点をさらに深掘りする
上書きされる可能性がある
shutil.move は、移動先に同名ファイルがあると上書きします。
上書きを避けたい場合は、事前にチェックする必要があります。
if os.path.exists(dst):
print("警告: すでに存在するため移動を中止:", dst)
else:
shutil.move(src, dst)
Pythonファイルシステムによって挙動が変わる
同じドライブ内の移動は高速ですが、別ドライブ間の移動は「コピーして削除」という動作になります。
まとめ:ファイル移動は業務自動化の「整理整頓の核」
ファイル移動を使いこなすと、業務自動化の幅が一気に広がります。
ファイルの仕分け
処理済みデータの整理
エラー時の隔離
日付ごとのアーカイブ
これらはすべて shutil.move の応用です。
もしよければ、あなたのPCの中で「毎回手で移動しているファイル」を一つ思い浮かべてみてください。
その作業は、今日紹介したテンプレートで確実に自動化できます。
