Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイル移動

Python Python
スポンサーリンク

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.txtprocessed/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)
Python

os.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の中で「毎回手で移動しているファイル」を一つ思い浮かべてみてください。
その作業は、今日紹介したテンプレートで確実に自動化できます。

タイトルとURLをコピーしました