プログラミング学習

Pythonで簡単ファイル整理!拡張子と日付で自動分類する無料アプリの作り方

記事内に商品プロモーションを含む場合があります

日々増えていくファイルを手動で整理するのは、正直かなりの手間ですよね。
特にデスクトップやダウンロードフォルダがすぐに散らかってしまう…という方は多いはずです。

この記事では、PythonとTkinterを使って作る、「指定フォルダ内のファイルを拡張子日付で自動分類するアプリ」を紹介します。
さらに、分類対象の拡張子を選べる機能や、ログで処理結果を確認できる仕組みも追加しています。

筆者自身、業務で大量の画像・PDF・スプレッドシート(Excelファイル)を扱うことが多く、このアプリを導入したことで、ファイル整理の時間を毎日15分以上削減できました。

アプリの特徴

  1. GUIで操作できる(Tkinter使用)
  2. 拡張子ごとに自動分類
  3. 作成日または更新日で分類
  4. 分類対象の拡張子をGUI上で選択可能
  5. 処理ログをリアルタイム表示して進捗確認

Python初心者でもGUIで操作できるため、プログラム知識がなくても安心して使えます。

UIイメージ(レイアウト)

以下のような直感的UIで、クリック操作だけで分類処理を実行できます。

Pythonファイル整理アプリ UI

Pythonサンプルコード(GUI付き)

このコードを file_sorter.py として保存し、Pythonで実行すればすぐに使えます。
(Python 3.8以上 + Tkinter 標準搭載環境を推奨)

import os
import shutil
from pathlib import Path
from datetime import datetime
import tkinter as tk
from tkinter import filedialog, messagebox, scrolledtext

# 対象とする拡張子の候補
EXT_OPTIONS = ['jpg', 'png', 'pdf', 'docx', 'xls', 'xlsx', 'txt', 'csv']

# ファイル分類関数
def classify_files():
    folder = folder_path.get()
    output = output_path.get()
    use_ext = ext_var.get()
    use_date = date_var.get()
    date_type = date_type_var.get()

    selected_exts = [ext for ext, var in ext_vars.items() if var.get()]

    if not folder or not output:
        messagebox.showwarning("警告", "対象フォルダと出力先フォルダを指定してください。")
        return

    log_area.delete(1.0, tk.END)
    files = list(Path(folder).glob("*.*"))

    for file in files:
        try:
            ext = file.suffix[1:].lower()
            if use_ext and ext not in selected_exts:
                continue

            # 分類先フォルダ構築
            dest_folder = Path(output)
            if use_ext:
                dest_folder = dest_folder / ext
            if use_date:
                timestamp = file.stat().st_ctime if date_type == "created" else file.stat().st_mtime
                date_str = datetime.fromtimestamp(timestamp).strftime("%Y-%m")
                dest_folder = dest_folder / date_str

            dest_folder.mkdir(parents=True, exist_ok=True)
            shutil.move(str(file), str(dest_folder / file.name))
            log_area.insert(tk.END, f"✔ {file.name} → {dest_folder}\n")

        except Exception as e:
            log_area.insert(tk.END, f"⚠ {file.name} → エラー: {e}\n")

# フォルダ選択
def select_folder(entry):
    path = filedialog.askdirectory()
    if path:
        entry.set(path)

# GUI構築
root = tk.Tk()
root.title("ファイル自動分類アプリ")
root.geometry("650x600")

folder_path = tk.StringVar()
output_path = tk.StringVar()
ext_var = tk.BooleanVar(value=True)
date_var = tk.BooleanVar(value=True)
date_type_var = tk.StringVar(value="created")
ext_vars = {ext: tk.BooleanVar(value=True) for ext in EXT_OPTIONS}

# UIレイアウト
tk.Label(root, text=" 対象フォルダ").pack()
tk.Entry(root, textvariable=folder_path, width=60).pack()
tk.Button(root, text="参照", command=lambda: select_folder(folder_path)).pack()

tk.Label(root, text=" 出力先フォルダ").pack()
tk.Entry(root, textvariable=output_path, width=60).pack()
tk.Button(root, text="参照", command=lambda: select_folder(output_path)).pack()

tk.Label(root, text=" 分類方法").pack()
tk.Checkbutton(root, text="拡張子で分類", variable=ext_var).pack()
tk.Checkbutton(root, text="日付で分類", variable=date_var).pack()

tk.Label(root, text=" 日付形式").pack()
tk.Radiobutton(root, text="作成日", variable=date_type_var, value="created").pack()
tk.Radiobutton(root, text="更新日", variable=date_type_var, value="modified").pack()

tk.Label(root, text=" 対象拡張子を選択").pack()
ext_frame = tk.Frame(root)
ext_frame.pack()
for i, ext in enumerate(EXT_OPTIONS):
    tk.Checkbutton(ext_frame, text=ext, variable=ext_vars[ext]).grid(row=i//4, column=i%4, sticky="w")

tk.Button(root, text=" 実行", command=classify_files, bg="lightgreen").pack(pady=10)

tk.Label(root, text=" ログ").pack()
log_area = scrolledtext.ScrolledText(root, width=80, height=15)
log_area.pack()

root.mainloop()

実行方法

  1. Python(公式サイト)をインストール
  2. 上記コードを file_sorter.py として保存
  3. ターミナルまたはコマンドプロンプトで python file_sorter.py を実行

実行するとGUIが表示され、対象フォルダ・出力先を指定して「実行」をクリックするだけでOKです。

動作イメージ

ファイル整理アプリ 初期画面初期状態
ファイル整理アプリ 実行後実行後のGUI

動作確認

仕分け前のフォルダ

整理前のフォルダ構成

仕分け後の結果

整理後のフォルダ構成

ファイルは自動的に拡張子ごと・日付ごとに分類され、下記のように整理されます。

jpgフォルダ内容
pdfフォルダ内容
txtフォルダ内容

痒いところに手が届く!カスタマイズ例

このアプリはシンプルな設計なので、以下のような機能も簡単に追加できます👇

  • 重複ファイルチェック:同名ファイルがある場合に自動リネーム
  • 除外条件の設定:特定フォルダや一部拡張子をスキップ
  • ファイル容量で分類:大容量ファイルだけ別フォルダへ
  • EXE化して配布PyInstallerで実行ファイル化

特に、”重複ファイル処理”や”容量別整理”は、実務でのニーズが高い機能です。
コードを数行追加するだけで、より実用的なツールに進化させられます。

Pythonで重複ファイルを自動検出&整理する方法|画像・PDF対応のGUIツール付き解説PCのフォルダに、同じファイルがいくつもあって困った経験はありませんか? 特に画像やPDFを頻繁に扱う方は、「ファイル名は違うけど中身...

拡張子分類を増やして専門ファイルにも対応

EXT_OPTIONS = ['jpg', 'png', 'pdf', 'docx', 'xls', 'xlsx', 'txt', 'csv']

ここに dwgSTEPpsd などを追加すれば、CADデータやデザインファイルなどの専門フォーマットにも対応可能です。
業務用途にも十分応用できます。

今後追加したい機能

  • 分類前のプレビュー表示
  • 重複ファイルの検出とスキップ
  • 分類後の統計表示(ファイル数・容量)
  • EXE化して配布可能に(PyInstaller対応)

まとめ

この「ファイル自動分類アプリ」は、日々のファイル整理をワンクリックで自動化できる便利ツールです。

Python初心者でも扱いやすく、実務・副業・学習すべてに応用可能。
自分の作業スタイルに合わせて機能を追加していけば、
「自分専用の整理アシスタント」を作ることもできます。

もし「自分の業務に合わせてカスタマイズしたい!」という方は、コメントやSNSで気軽にご相談ください。

AIブロガー
筆者:yuki
Python未経験からAIと対話しながらコード作成。副業×自動化×プログラミングの可能性を模索中。 ▷詳細プロフィールはこちら