【Python標準ライブラリ編 #1】osとshutilでPCを自動整理!デスクトップお掃除ツールを作ろう

ALL

こんにちは、Tech Samuraiです!
これまでの冒険で、私たちはPythonの文法やオブジェクト指向といった、力強い「刀」の作り方を学んできました。今回から始まる新シリーズでは、Pythonが最初から鞘に収めている、驚くほど便利な「小刀」たち、すなわち**標準ライブラリ**の使い方を探検していきます。

記念すべき第一弾のテーマは、多くの人が抱える悩み、「**気づけばファイルだらけのデスクトップ**」を解決する、**デスクトップ自動お掃除ツール**の開発です!

このプロジェクトで主役となるのは、Pythonに標準で備わっている`os`と`shutil`という2つのライブラリ。これらを使えば、ファイルやフォルダを自在に操り、面倒な整理整頓をプログラムに任せることができるようになります。さあ、あなたのデスクトップに秩序を取り戻しましょう!


1. 設計図:お掃除ツールの動作計画

プログラムを書き始める前に、どのような手順で整理を行うか、その計画を立てましょう。

  1. ターゲットを指定する: まず、「デスクトップ」というお掃除対象の場所をプログラムに教える。
  2. 仕分けルールを決める: 「`.jpg`や`.png`は画像フォルダへ」「`.pdf`や`.txt`は書類フォルダへ」といった、拡張子ごとの仕分けルールを定義する。
  3. ファイル一覧を取得する: ターゲットの場所にある全てのファイルの名前をリストアップする。
  4. ファイルを1つずつチェック: リストアップしたファイルを順番に見ていく。
    • ファイルの拡張子を確認する。
    • 仕分けルールに基づき、どのフォルダに移動すべきか判断する。
  5. フォルダを確認&作成: 移動先のフォルダが存在するか確認し、もし無ければ新しく作成する。
  6. ファイルを移動する: 最終的に、ファイルを対応するフォルダへ移動させる。

このシンプルな6ステップで、私たちのツールは完成します。


2. 武器の紹介:`os`と`shutil`ライブラリ

今回のプロジェクトで使う、2つの強力な標準ライブラリの主な機能を紹介します。

  • osライブラリ (Operating System): OSと対話するための基本的な機能を提供します。
    • os.path.join(): OSの違い(Windowsの`\`とMac/Linuxの`/`)を吸収し、安全にファイルパスを結合してくれる。
    • os.listdir(): 指定したフォルダの中にあるファイルやフォルダの一覧をリストで取得する。
    • os.path.exists(): 指定したファイルやフォルダが存在するかをTrue/Falseで返す。
    • os.mkdir(): 新しいフォルダを1つ作成する。
  • shutilライブラリ (Shell Utilities): `os`よりも高度で便利なファイル操作機能を提供します。
    • shutil.move(): ファイルやフォルダを別の場所へ移動する。

これらの道具を組み合わせることで、ファイルシステムを自在に操ることができます。


3. 実装:デスクトップお掃除スクリプトの全コード

それでは、これまでの計画と道具を使って、実際のプログラムを組んでいきましょう。以下のコードを`desktop_cleaner.py`などの名前で保存してください。

import os
import shutil
from pathlib import Path

# --- 1. ターゲットフォルダの指定 ---
# ホームディレクトリのパスを取得し、"Desktop" を結合
target_dir = os.path.join(str(Path.home()), "Desktop")

# --- 2. 仕分けルールの定義 ---
# キー:フォルダ名、値:対応する拡張子のリスト
categories = {
    "画像ファイル": [".jpg", ".jpeg", ".png", ".gif", ".bmp"],
    "書類ファイル": [".pdf", ".docx", ".xlsx", ".pptx", ".txt"],
    "動画ファイル": [".mp4", ".mov", ".avi"],
    "音楽ファイル": [".mp3", ".wav"],
    "圧縮ファイル": [".zip", ".rar"]
}

print(f"整理対象のフォルダ: {target_dir}")

# --- 3. ファイル一覧の取得 ---
try:
    all_files = os.listdir(target_dir)
except FileNotFoundError:
    print(f"エラー: フォルダ '{target_dir}' が見つかりません。")
    exit()

# --- 4. 各ファイルをループで処理 ---
for file_name in all_files:
    # ファイルのフルパスを作成
    src_path = os.path.join(target_dir, file_name)

    # ファイルかどうかを判定(フォルダは無視)
    if os.path.isfile(src_path):
        # ファイルの拡張子を取得
        _, ext = os.path.splitext(file_name)
        ext = ext.lower() # 拡張子を小文字に統一

        # --- 5. 移動先を判断 ---
        moved = False
        for category_name, extensions in categories.items():
            if ext in extensions:
                # --- 6. 移動先フォルダの確認と作成 ---
                dest_dir = os.path.join(target_dir, category_name)
                if not os.path.exists(dest_dir):
                    os.mkdir(dest_dir)
                    print(f"作成: フォルダ '{category_name}'")

                # --- 7. ファイルの移動 ---
                dest_path = os.path.join(dest_dir, file_name)
                shutil.move(src_path, dest_path)
                print(f"移動: {file_name} -> {category_name}")
                moved = True
                break

        # どのカテゴリにも当てはまらなかったファイル
        # if not moved:
        #     print(f"仕分けスキップ: {file_name}")

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

4. 使い方とカスタマイズ

【重要:実行前の注意!】
このスクリプトは、あなたのデスクトップ上のファイルを実際に移動させます。万が一に備え、**いきなり本番のデスクトップで実行するのではなく、まずテスト用のフォルダを作り、その中にダミーのファイルをいくつか入れて試す**ことを強くお勧めします。

  1. 上記のコードを保存します。
  2. ターミナルを開き、python3 desktop_cleaner.py を実行します。
  3. デスクトップ上のファイルが、拡張子に応じて新しく作られたフォルダに移動されていれば成功です!

カスタマイズ:
新しい仕分けルールを追加したい場合は、コードの中のcategories辞書を編集するだけです。例えば、CSVファイルを「データ」フォルダに入れたい場合は、以下のように一行追加します。

categories = {
    "画像ファイル": [".jpg", ".jpeg", ".png", ".gif", ".bmp"],
    "書類ファイル": [".pdf", ".docx", ".xlsx", ".pptx", ".txt"],
    "データファイル": [".csv", ".json"], # ← このように追加
    # ...
}

まとめと次回予告

今回は、Pythonの標準ライブラリosshutilを使い、実用的なデスクトップお掃除ツールを作成しました。たった数十行のコードで、面倒な手作業を自動化できるPythonの力を体感していただけたかと思います。

ファイルを整理できるようになったら、次は何をしたくなるでしょう? そう、**時間**を操りたくなりますよね。

次回は、Pythonの`datetime`ライブラリを使って、「特定のイベントまでの日数を計算するカウントダウンタイマー」の作成に挑戦します。お楽しみに!

コメント

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