Pythonでのファイル整理術

## Pythonで学ぶファイル整理術：年末の片付けにも役立つ
### 1.はじめに
年末になるとPCの中も整理したくなりますよね？
特に「ダウンロードフォルダがごちゃごちゃしている…」と感じる人も多いはず。
そこで今回は、Pythonを使って ファイルやフォルダを自動で整理するスクリプト を作成します！
簡単なコードで効率よく整理できるので、ぜひ試してみてください。
***
### 2.必要な準備
Pythonの標準ライブラリ（osやshutil）を使うので、特別なインストールは不要です。
Pythonがインストールされていれば、すぐに始められます。
***
### 3.実現すること
このスクリプトでは以下を実現します：

・フォルダ内のファイルを拡張子ごとに分類し、サブフォルダに移動。
・古いファイルをアーカイブ（ZIP圧縮）。
：不要な空フォルダを削除。
年末の整理だけでなく、日常的なファイル管理にも役立ちます！

### 実装コード
```php
import os
import shutil
import datetime
from zipfile import ZipFile

def organize_files(folder_path):
    """フォルダ内のファイルを整理する"""
    extensions = {
        "画像": [".jpg", ".png", ".gif"],
        "ドキュメント": [".pdf", ".docx", ".txt"],
        "動画": [".mp4", ".mkv", ".avi"],
        "アーカイブ": [".zip", ".rar", ".7z"],
    }

    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if not os.path.isfile(file_path):
            continue

        _, ext = os.path.splitext(filename)
        for category, ext_list in extensions.items():
            if ext.lower() in ext_list:
                category_folder = os.path.join(folder_path, category)
                os.makedirs(category_folder, exist_ok=True)

                destination = os.path.join(category_folder, filename)
                counter = 1
                while os.path.exists(destination):
                    base, ext = os.path.splitext(filename)
                    destination = os.path.join(category_folder, f"{base}_{counter}{ext}")
                    counter += 1

                shutil.move(file_path, destination)
                print(f"{filename} を {category} に移動しました。")
                break
        else:
            else_folder = os.path.join(folder_path, "その他")
            os.makedirs(else_folder, exist_ok=True)
            shutil.move(file_path, os.path.join(else_folder, filename))
            print(f"{filename} を その他 に移動しました。")

def archive_old_files(folder_path, days=30):
    """指定日数以上経過したファイルをアーカイブ"""
    now = datetime.datetime.now()
    archive_folder = os.path.join(folder_path, "アーカイブ")
    os.makedirs(archive_folder, exist_ok=True)

    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if not os.path.isfile(file_path):
            continue

        modified_time = datetime.datetime.fromtimestamp(os.path.getmtime(file_path))
        if (now - modified_time).days > days:
            zip_path = os.path.join(archive_folder, "old_files.zip")
            with ZipFile(zip_path, 'a') as archive:
                if filename not in archive.namelist():
                    archive.write(file_path, arcname=filename)
            os.remove(file_path)
            print(f"{filename} をアーカイブしました。")

def remove_empty_folders(folder_path):
    """空フォルダを削除する"""
    for root, dirs, files in os.walk(folder_path, topdown=False):
        for dir_name in dirs:
            dir_path = os.path.join(root, dir_name)
            if not os.listdir(dir_path):
                os.rmdir(dir_path)
                print(f"{dir_path} を削除しました。")

if __name__ == "__main__":
    target_folder = input("整理したいフォルダのパスを入力してください: ")
    if os.path.exists(target_folder):
        organize_files(target_folder)
        archive_old_files(target_folder)
        remove_empty_folders(target_folder)
        print("整理が完了しました！")
    else:
        print(f"指定されたフォルダが見つかりません: {target_folder}")

```
***
### 4.実行例
**整理前のフォルダ**
```
downloads/
├── photo1.jpg
├── report.pdf
├── video.mp4
├── old_data.txt
```

**整理後フォルダ**
```
downloads/
├── 画像/
│   └── photo1.jpg
├── ドキュメント/
│   ├── report.pdf
│   └── old_data.txt
├── 動画/
│   └── video.mp4
├── アーカイブ/
    └── old_files.zip
```

**解説**
ファイルの分類（def organize_files）
・os.listdir()で指定フォルダ内のファイルを取得。
・拡張子はos.path.splitext()で抽出し、辞書に基づいて分類。
古いファイルのアーカイブ（def archive_old_files）
・ファイルの最終更新日時はos.path.getmtime()で取得。
・日付判定を行い、古いファイルをZIPに圧縮。
空フォルダの削除（def remove_empty_folder）
・os.walk()でフォルダを再帰的に探索し、空フォルダを削除。
***
### 5.応用例
・自動実行：WindowsのタスクスケジューラやLinuxのcronで定期実行。
・クラウド連携：整理したファイルをGoogle DriveやDropboxにアップロード。
・レポート生成：整理した結果をCSVやHTML形式で保存。
***
### 6.まとめ
この記事では、Pythonを使ってファイルやフォルダを自動で整理する方法を紹介しました。
年末の大掃除や日常的な整理に役立てていただけると嬉しいです！
ぜひ、自分の環境に合わせてカスタマイズしてみてください。