Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - ファイルダウンロード整理

Python Python
スポンサーリンク

ファイルダウンロード整理は「ダウンロードフォルダを自動で整頓し、必要なファイルだけを安全に扱える状態にする」ための前処理

業務では、ブラウザや外部システムからファイルをダウンロードした後に、次のような作業が必要になることが多いです。

  • ダウンロードフォルダが散らかっていて目的のファイルが見つからない
  • 不要ファイル(重複・古い版・一時ファイル)が混ざっている
  • 拡張子ごとにフォルダへ自動仕分けしたい
  • ダウンロード直後のファイルを別フォルダへ移動して処理したい
  • ファイル名を業務ルールに合わせてリネームしたい

Python を使うと、これらを完全自動化できます。
ここでは、初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。


ダウンロードフォルダの中身を拡張子ごとに自動仕分けする

拡張子別にフォルダへ振り分けるテンプレート

import os
import shutil

def sort_downloads(folder):
    for name in os.listdir(folder):
        path = os.path.join(folder, name)

        if os.path.isfile(path):
            ext = os.path.splitext(name)[1].lower().replace(".", "")
            target = os.path.join(folder, ext)

            os.makedirs(target, exist_ok=True)
            shutil.move(path, os.path.join(target, name))
            print("移動:", name, "→", target)

sort_downloads("downloads")
Python

重要ポイント

  • .csvdownloads/csv/ のように自動で仕分け
  • os.path.splitext() で拡張子を安全に取得
  • フォルダがなければ自動作成されるため手間がない

ダウンロード直後のファイルだけを検出して処理する

「最新のファイル」を取得するテンプレート

import os

def get_latest_file(folder):
    files = [
        os.path.join(folder, f)
        for f in os.listdir(folder)
        if os.path.isfile(os.path.join(folder, f))
    ]
    return max(files, key=os.path.getmtime)

latest = get_latest_file("downloads")
print("最新ファイル:", latest)
Python

深掘りポイント

  • ダウンロード直後のファイルは更新日時が最も新しい
  • 「最新ファイルを自動処理する」業務で非常に役立つ
  • 例:最新の売上データを自動集計するなど

ダウンロードファイルを業務ルールに合わせてリネームする

日付+業務名などのルールに合わせてリネーム

import os
from datetime import datetime

def rename_download(path, prefix="report"):
    folder, name = os.path.split(path)
    ext = os.path.splitext(name)[1]
    today = datetime.now().strftime("%Y%m%d")
    new_name = f"{prefix}_{today}{ext}"
    new_path = os.path.join(folder, new_name)
    os.rename(path, new_path)
    return new_path

print(rename_download("downloads/data.csv"))
Python

深掘りポイント

  • ダウンロードファイルは名前がランダムなことが多い
  • 業務ルールに合わせて統一名にすると管理が楽
  • 日付を付けるとバージョン管理がしやすい

不要ファイル(古い版・一時ファイル)を自動削除する

ダウンロードフォルダの「古いファイル」を削除する

import os
import time

def delete_old_downloads(folder, days=7):
    limit = time.time() - days * 86400

    for name in os.listdir(folder):
        path = os.path.join(folder, name)
        if os.path.isfile(path) and os.path.getmtime(path) < limit:
            os.remove(path)
            print("削除:", path)

delete_old_downloads("downloads", 7)
Python

深掘りポイント

  • ダウンロードフォルダは放置するとすぐに肥大化する
  • 7日・30日などのルールで自動削除すると快適
  • 更新日時で判断するため安全性が高い

ダウンロードファイルを自動で別フォルダへ移動する(処理フローの自動化)

例:ダウンロードされた CSV を処理フォルダへ移動

import os
import shutil

def move_csv_to_inbox(downloads, inbox):
    os.makedirs(inbox, exist_ok=True)

    for name in os.listdir(downloads):
        if name.lower().endswith(".csv"):
            src = os.path.join(downloads, name)
            dst = os.path.join(inbox, name)
            shutil.move(src, dst)
            print("移動:", src, "→", dst)

move_csv_to_inbox("downloads", "inbox")
Python

深掘りポイント

  • ダウンロード → 自動移動 → 自動処理という流れを作れる
  • CSV だけ、PDF だけなど拡張子フィルタが便利

例題①:ダウンロードされた ZIP を自動解凍して整理する

シナリオ

ダウンロードフォルダに ZIP が来たら自動で解凍したい。

import zipfile

def extract_zip_from_downloads(folder, out="unzipped"):
    os.makedirs(out, exist_ok=True)

    for name in os.listdir(folder):
        if name.lower().endswith(".zip"):
            path = os.path.join(folder, name)
            with zipfile.ZipFile(path, "r") as z:
                z.extractall(out)
            print("解凍:", name)

extract_zip_from_downloads("downloads")
Python

深掘りポイント

  • ZIP 解凍を自動化すると手作業がゼロになる
  • 解凍後に元 ZIP を削除する運用も可能

例題②:ダウンロードフォルダを「種類別+日付別」に整理する

シナリオ

ファイル種類ごとにフォルダを作り、その中で日付フォルダを作る。

import os
import shutil
from datetime import datetime

def sort_by_type_and_date(folder):
    for name in os.listdir(folder):
        path = os.path.join(folder, name)
        if os.path.isfile(path):
            ext = os.path.splitext(name)[1].lower().replace(".", "")
            date = datetime.fromtimestamp(os.path.getmtime(path)).strftime("%Y-%m-%d")

            target = os.path.join(folder, ext, date)
            os.makedirs(target, exist_ok=True)

            shutil.move(path, os.path.join(target, name))
            print("移動:", name, "→", target)

sort_by_type_and_date("downloads")
Python

深掘りポイント

  • 種類別+日付別の二段階整理で検索性が大幅に向上
  • 大量ダウンロードがある業務で特に効果的

pathlib を使った読みやすいダウンロード整理コード

Path オブジェクトで直感的に書ける

from pathlib import Path
import shutil

def sort_downloads_path(folder: Path):
    for p in folder.iterdir():
        if p.is_file():
            ext = p.suffix.replace(".", "")
            target = folder / ext
            target.mkdir(exist_ok=True)
            shutil.move(str(p), str(target / p.name))

sort_downloads_path(Path("downloads"))
Python

メリット

  • パス結合が / で直感的
  • suffixstem でファイル名操作が簡単
  • 保守性が高く、業務コードに向いている

ファイルダウンロード整理を業務で設計するときの視点

  • 拡張子ごとに仕分けると検索性が大幅に向上する
  • 最新ファイル検出は自動処理のトリガーとして便利
  • リネームで業務ルールに合わせた管理ができる
  • 古いファイル削除でフォルダ肥大化を防げる
  • ZIP 解凍や移動と組み合わせると処理フローが自動化される

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