この記事で作るもの
ダウンロードフォルダに溜まったファイルを、拡張子ごとに自動でフォルダに振り分けるPythonスクリプトを作ります。
こんな感じに整理されます:
ダウンロード/
├── 画像/ ← .jpg, .png, .gif など
├── ドキュメント/ ← .pdf, .docx, .xlsx など
├── 動画/ ← .mp4, .mov など
├── 音楽/ ← .mp3, .wav など
└── その他/ ← 上記に当てはまらないもの
必要なもの
- Python 3.8 以上(公式サイトからインストール)
- テキストエディタ(メモ帳でもOK)
追加のライブラリは不要です。Pythonに最初から入っている機能だけで作れます。
手順
ステップ1: スクリプトファイルを作る
好きな場所に organize.py というファイルを作り、以下のコードを書きます。
import os
import shutil
from pathlib import Path
# 整理したいフォルダのパス(自分の環境に合わせて変更)
TARGET_DIR = Path.home() / "Downloads"
# 拡張子とフォルダ名の対応表
CATEGORIES = {
"画像": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg", ".webp"],
"ドキュメント": [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".csv"],
"動画": [".mp4", ".mov", ".avi", ".mkv", ".wmv"],
"音楽": [".mp3", ".wav", ".flac", ".aac", ".ogg"],
"圧縮ファイル": [".zip", ".rar", ".7z", ".tar", ".gz"],
"プログラム": [".exe", ".msi", ".dmg"],
}
CATEGORIES は辞書(dict)と呼ばれるデータ構造で、「フォルダ名」と「そこに入れる拡張子のリスト」を対応づけています。
ステップ2: 振り分けの処理を書く
先ほどのコードの続きに、以下を追加します。
def get_category(extension):
"""拡張子からカテゴリ名を返す。該当なしなら「その他」"""
for category, extensions in CATEGORIES.items():
if extension.lower() in extensions:
return category
return "その他"
def organize():
"""ダウンロードフォルダ内のファイルを整理する"""
moved_count = 0
for file_path in TARGET_DIR.iterdir():
# フォルダはスキップ(ファイルだけ対象)
if not file_path.is_file():
continue
# このスクリプト自身はスキップ
if file_path.name == "organize.py":
continue
# 拡張子からカテゴリを判定
category = get_category(file_path.suffix)
# 振り分け先のフォルダを作る(なければ自動で作成)
dest_dir = TARGET_DIR / category
dest_dir.mkdir(exist_ok=True)
# ファイルを移動
dest_path = dest_dir / file_path.name
# 同名ファイルがあったら番号をつける
counter = 1
while dest_path.exists():
stem = file_path.stem
suffix = file_path.suffix
dest_path = dest_dir / f"{stem}_{counter}{suffix}"
counter += 1
shutil.move(str(file_path), str(dest_path))
print(f" {file_path.name} → {category}/")
moved_count += 1
return moved_count
Path.iterdir() はフォルダ内のファイルやサブフォルダを1つずつ取り出すメソッドです。for ループで順番に処理していきます。
ステップ3: 実行部分を書く
最後に、スクリプトを実行したときに動く部分を追加します。
if __name__ == "__main__":
print(f"整理対象: {TARGET_DIR}")
print("-" * 40)
count = organize()
print("-" * 40)
print(f"完了! {count} 個のファイルを整理しました。")
if __name__ == "__main__": は「このファイルを直接実行したときだけ動く」という意味のPythonの定型文です。
ステップ4: 実行する
ターミナル(コマンドプロンプト)を開いて、以下を実行します。
python organize.py
こんな出力が表示されます:
整理対象: C:\Users\あなたの名前\Downloads
----------------------------------------
report.pdf → ドキュメント/
photo.jpg → 画像/
music.mp3 → 音楽/
setup.exe → プログラム/
----------------------------------------
完了! 4 個のファイルを整理しました。
完成コード
コピペで動く全体のコードです。
import os
import shutil
from pathlib import Path
# 整理したいフォルダのパス(自分の環境に合わせて変更)
TARGET_DIR = Path.home() / "Downloads"
# 拡張子とフォルダ名の対応表
CATEGORIES = {
"画像": [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".svg", ".webp"],
"ドキュメント": [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".csv"],
"動画": [".mp4", ".mov", ".avi", ".mkv", ".wmv"],
"音楽": [".mp3", ".wav", ".flac", ".aac", ".ogg"],
"圧縮ファイル": [".zip", ".rar", ".7z", ".tar", ".gz"],
"プログラム": [".exe", ".msi", ".dmg"],
}
def get_category(extension):
"""拡張子からカテゴリ名を返す。該当なしなら「その他」"""
for category, extensions in CATEGORIES.items():
if extension.lower() in extensions:
return category
return "その他"
def organize():
"""ダウンロードフォルダ内のファイルを整理する"""
moved_count = 0
for file_path in TARGET_DIR.iterdir():
if not file_path.is_file():
continue
if file_path.name == "organize.py":
continue
category = get_category(file_path.suffix)
dest_dir = TARGET_DIR / category
dest_dir.mkdir(exist_ok=True)
dest_path = dest_dir / file_path.name
counter = 1
while dest_path.exists():
stem = file_path.stem
suffix = file_path.suffix
dest_path = dest_dir / f"{stem}_{counter}{suffix}"
counter += 1
shutil.move(str(file_path), str(dest_path))
print(f" {file_path.name} → {category}/")
moved_count += 1
return moved_count
if __name__ == "__main__":
print(f"整理対象: {TARGET_DIR}")
print("-" * 40)
count = organize()
print("-" * 40)
print(f"完了! {count} 個のファイルを整理しました。")
まとめと次のステップ
Pythonの標準ライブラリだけで、ファイル整理の自動化ができました。
さらに発展させるなら:
- 定期実行: Windowsのタスクスケジューラに登録すれば、毎日自動で整理される
- カテゴリ追加:
CATEGORIESに好きな拡張子とフォルダ名を追加できる - ログ出力: いつ何を移動したか記録するようにすると、あとから確認できて安心
関連リソース
Pythonをもっと学びたい方へ:
リンク