Python 業務自動化 | ファイル・フォルダ自動化:基本操作 - 作業フォルダ初期化

Python Python
スポンサーリンク

作業フォルダ初期化は「毎回の処理をクリーンな状態から始める」ための重要な自動化

業務自動化では、処理の途中で生成される中間ファイル・ログ・一時ファイルがフォルダに残り続けると、次のような問題が起きます。

  • 前回の残骸が原因で処理が失敗する
  • 古いファイルを誤って読み込んでしまう
  • フォルダが散らかって管理しづらくなる
  • セキュリティ上、残してはいけないファイルが残る

そこで必要なのが 作業フォルダ初期化(クリーンアップ) です。
Python を使うと、作業フォルダを安全にリセットし、毎回の処理を安定させることができます。


作業フォルダ初期化の基本方針

作業フォルダ初期化にはいくつかのアプローチがあります。

  • フォルダ内のファイルだけ削除する
  • サブフォルダも含めて全削除する
  • フォルダごと削除して再作成する
  • 特定の拡張子だけ削除する
  • 古いファイルだけ削除する

どれを選ぶかは業務の性質によって変わります。


フォルダ内のファイルだけ削除する(最も基本的)

作業フォルダの中身を空にするテンプレート

import os

def clear_folder(folder):
    for name in os.listdir(folder):
        path = os.path.join(folder, name)
        if os.path.isfile(path):
            os.remove(path)
            print("削除:", path)

clear_folder("work")
Python

深掘りポイント

  • フォルダ自体は残すため、権限や設定が維持される
  • 中身だけ消すので安全性が高い
  • ログフォルダや作業フォルダでよく使う

サブフォルダも含めて完全初期化する(階層構造対応)

os.walk を使って階層全体を削除

import os
import shutil

def clear_folder_recursive(folder):
    for name in os.listdir(folder):
        path = os.path.join(folder, name)
        if os.path.isfile(path):
            os.remove(path)
        else:
            shutil.rmtree(path)
        print("削除:", path)

clear_folder_recursive("work")
Python

深掘りポイント

  • サブフォルダも含めて完全に空にできる
  • 大規模プロジェクトの作業フォルダで役立つ
  • 誤削除を防ぐため「作業専用フォルダ」に限定するのが安全

フォルダごと削除して再作成する(最も確実)

作業フォルダを丸ごとリセットする

import shutil
import os

def reset_work_folder(folder):
    if os.path.exists(folder):
        shutil.rmtree(folder)
    os.makedirs(folder)
    print("作業フォルダを初期化しました:", folder)

reset_work_folder("work")
Python

深掘りポイント

  • 最も確実で、残骸が一切残らない
  • 一時ファイルが大量にある場合に最適
  • 誤削除を防ぐため、フォルダ名を固定しておくと安全

特定の拡張子だけ削除する(中間ファイルだけ消したい場合)

例:.tmp と _work.csv だけ削除

import os

def clear_temp_files(folder):
    for name in os.listdir(folder):
        if name.endswith(".tmp") or name.endswith("_work.csv"):
            path = os.path.join(folder, name)
            os.remove(path)
            print("削除:", path)

clear_temp_files("work")
Python

深掘りポイント

  • 中間ファイルだけ削除したい場合に便利
  • 拡張子や名前パターンを業務ルールに合わせて調整できる

古いファイルだけ削除して初期化する(安全性重視)

例:7日以上前のファイルだけ削除

import os
import time

def clear_old_files(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)

clear_old_files("work", 7)
Python

深掘りポイント

  • 更新日時で判定するため誤削除しにくい
  • 長期運用の自動処理で特に有効

例題①:毎朝のバッチ処理前に作業フォルダを初期化する

シナリオ

毎朝 9 時にバッチ処理を実行する前に、作業フォルダを空にしたい。

reset_work_folder("daily_work")
Python

深掘りポイント

  • バッチ処理の安定性が大幅に向上
  • 前日の残骸によるエラーを防げる

例題②:ETL 処理の中間ファイルだけ削除する

シナリオ

ETL の途中で生成される _tmp.csv を削除したい。

clear_temp_files("etl_work")
Python

深掘りポイント

  • 中間ファイルは名前パターンで判定できることが多い
  • 必要なファイルを残しつつクリーンアップできる

例題③:ZIP 解凍後の一時展開フォルダを初期化する

シナリオ

ZIP を解凍 → 中身を処理 → 展開フォルダを初期化したい。

reset_work_folder("unzipped_temp")
Python

深掘りポイント

  • 解凍後の一時フォルダは残す必要がない
  • 大量ファイルでも一括削除できる

pathlib を使った読みやすい作業フォルダ初期化

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

from pathlib import Path
import shutil

def reset_path_folder(folder: Path):
    if folder.exists():
        shutil.rmtree(folder)
    folder.mkdir()
    print("初期化:", folder)

reset_path_folder(Path("work"))
Python

メリット

  • パス結合が / で直感的
  • exists()mkdir() が読みやすい
  • 保守性が高く、業務コードに向いている

作業フォルダ初期化を業務で設計するときの視点

  • フォルダごと削除するか、中身だけ削除するかを明確にする
  • 誤削除を防ぐため「作業専用フォルダ」を用意する
  • 中間ファイルの命名ルールを決めると自動化しやすい
  • バッチ処理の前後に初期化を入れると安定性が向上する
  • 大量ファイルがある場合はフォルダごと削除が最も効率的

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