Pythonでファイル・写真を自動整理する方法【フォルダ振り分けを解説】

python
自動化・詳細手順

Pythonでファイル・写真を自動整理する方法

拡張子ごと・撮影日ごとに、フォルダへ自動で振り分けます

プログラミング未経験OK 所要時間の目安:20分程度

この記事は、「Pythonでできる日常の自動化6選」で紹介した②ファイル・写真の自動整理の詳しい作り方をまとめた記事です。

ダウンロードフォルダやスマホから取り込んだ写真フォルダの中身が、いつの間にかぐちゃぐちゃになっていませんか?Pythonを使えば、ファイルの種類(拡張子)ごと・写真の撮影日ごとに、フォルダへ自動で振り分けることができます。Python本体だけで動くので、追加のライブラリのインストールも不要です。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

用意するもの

今回は、Pythonに標準で付属している機能だけを使います。pip installで追加のライブラリを用意する必要はありません。

  • Python本体
  • コードを書くためのエディタ(VS Codeなど)
INFO

Pythonのインストール、コードを書くためのエディタ(VS Code)の準備、コードの書き方・実行方法がまだの方は、先に「Pythonを始める前に:インストールとエディタの準備」を済ませてから、この続きに進んでください。

注意

このあとのコードは、実際にパソコン上のファイルを移動します。まずはテスト用に新しく作った空のフォルダで試してから、普段使っているフォルダに適用することを強くおすすめします。

整理のルールを決める

ファイル整理の自動化でよく使われるルールは、主に次の2つです。

ルール向いている用途
拡張子ごとに振り分けるダウンロードフォルダなど、いろいろな種類のファイルが混ざる場所
日付ごとに振り分ける写真フォルダなど、時系列で見返したい場所

この記事では、この2つを両方とも紹介します。ダウンロードフォルダには「拡張子ごと」、写真フォルダには「撮影日ごと」というように、フォルダの使い方に合わせて使い分けるのがおすすめです。

フォルダ内のファイル一覧を取得する

まずは、対象フォルダの中に何が入っているかをPythonで確認してみましょう。ファイルやフォルダのパス(場所)を扱うときは、pathlibというPython標準の機能を使います。

from pathlib import Path

# 整理したいフォルダを指定する(ここではテスト用フォルダの例)
target_dir = Path.home() / "Desktop" / "test_folder"

for file in target_dir.iterdir():
    if file.is_file():
        print(file.name, file.suffix)

実行すると、フォルダ内のファイル名と拡張子(.jpg.pdfなど)が一覧で表示されます。Path.home()は、Windows・Macどちらでも自分のユーザーフォルダを自動で指してくれる書き方です。

MEMO

target_dirの部分を、実際に整理したいフォルダのパスに書き換えて使います。例えばダウンロードフォルダならPath.home() / "Downloads"のように指定します。

拡張子ごとにフォルダへ振り分ける

ファイルの一覧が取得できたら、拡張子ごとに専用のフォルダを自動で作り、ファイルを移動させます。ファイルの移動にはshutilというPython標準の機能を使います。

from pathlib import Path
import shutil

target_dir = Path.home() / "Desktop" / "test_folder"

# 拡張子とフォルダ名の対応表
EXT_FOLDER = {
    ".jpg": "画像", ".jpeg": "画像", ".png": "画像",
    ".pdf": "PDF",
    ".docx": "Word", ".doc": "Word",
    ".xlsx": "Excel", ".xls": "Excel",
    ".zip": "圧縮ファイル",
}

for file in target_dir.iterdir():
    if file.is_file():
        folder_name = EXT_FOLDER.get(file.suffix.lower(), "その他")
        dest_dir = target_dir / folder_name
        dest_dir.mkdir(exist_ok=True)
        shutil.move(str(file), str(dest_dir / file.name))

print("整理が完了しました")

実行すると、「画像」「PDF」「Word」「Excel」「圧縮ファイル」といったフォルダが自動で作られ、それぞれの種類のファイルが移動します。対応表にない拡張子のファイルは「その他」フォルダにまとめられます。

POINT

EXT_FOLDERの対応表は自由に増やせます。よく使う拡張子を追加しておくと、より自分向けの整理ルールになります。

写真を撮影日ごとにフォルダへ振り分ける

写真フォルダには、拡張子ではなく「いつのものか」で振り分けるほうが見返しやすくなります。ファイルの更新日時をもとに、「2026-08」のような年月フォルダへ自動で振り分けてみましょう。

from pathlib import Path
import shutil
from datetime import datetime

photo_dir = Path.home() / "Pictures" / "test_photos"
PHOTO_EXT = {".jpg", ".jpeg", ".png", ".heic"}

for file in photo_dir.iterdir():
    if file.is_file() and file.suffix.lower() in PHOTO_EXT:
        taken = datetime.fromtimestamp(file.stat().st_mtime)
        folder_name = taken.strftime("%Y-%m")
        dest_dir = photo_dir / folder_name
        dest_dir.mkdir(exist_ok=True)
        shutil.move(str(file), str(dest_dir / file.name))

print("写真の整理が完了しました")

実行すると、写真の更新日時をもとに「2026-07」「2026-08」のような年月ごとのフォルダが自動で作られ、それぞれの写真が移動します。

MEMO

st_mtimeはファイルの「更新日時」です。厳密な撮影日を使いたい場合は、写真に埋め込まれているExif情報(撮影日時などの付加情報)を読み取る方法もありますが、この記事では手軽に使える更新日時で代用しています。

定期的に自動実行するには

ここまでのコードは、実行するたびにその時点のファイルを整理します。「毎日決まった時間に自動で実行する」ところまで仕組み化したい場合は、Windowsの「タスクスケジューラ」やMacの「cron」といった、パソコン自体にあらかじめ用意されているスケジュール実行機能を使うことで実現できます。

MEMO

この記事では詳しい設定方法までは扱いませんが、コード自体はすでに完成しているので、まずは自分で実行するところから始めて、慣れてきたら自動実行にも挑戦してみてください。

うまくいかないときのトラブルシューティング

大事なファイルを間違えて移動してしまわないか心配です
まずはshutil.moveの代わりにshutil.copyを使い、元のファイルを残したまま「コピー」で結果を確認するのがおすすめです。動作に問題がないことを確認してから、moveに切り替えてください。
移動先に同じ名前のファイルがあるとどうなりますか?
shutil.moveは、移動先に同名ファイルがあると上書きしてしまいます。心配な場合は、移動前にdest_dir / file.nameが既に存在するかを確認するコードを追加すると安全です。
サブフォルダの中にあるファイルも整理できますか?
この記事のコードのiterdir()は、指定したフォルダの直下だけを対象にします。サブフォルダの中まで含めたい場合は、iterdir()の代わりにrglob("*")を使うと、サブフォルダの中のファイルも対象にできます。

まとめ

Pythonの標準機能(pathlibshutil)だけを使って、ファイルを拡張子ごと・写真を撮影日ごとに自動整理する方法を紹介しました。ライブラリのインストールが不要なので、今日からすぐに試すことができます。まずはテスト用フォルダで動作を確認してから、普段使っているフォルダに適用してみてください。

他の自動化アイデアも見てみる

家計簿の自動集計や通知の自動化など、Pythonでできる生活の自動化アイデアを6つ紹介しています。

6テーマ一覧を見る

コメント

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