業務効率化・自動化の事例として、ディレクトリの更新日時の古いディレクトリを削除する方法を解説します。
自動的にディレクトリが増加する処理などを行っていると、更新が古いものは不要な場合があると思います。そのまま増え続けると、容量を圧迫してしまったり、処理の低下につながってしまいます。
今回紹介する方法で、古いディレクトリを自動で削除することが可能になりますので、ぜひ活用してみてください。
使用モジュール
Python標準モジュールを使用します。
インストール:不要
インストール:不要
インストール:不要
インストール:不要
更新日時の古いディレクトリを削除する
14日前に更新されたディレクトリを削除するサンプルプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import os import time import sys import shutil sys.setrecursionlimit(10000) path = 'temp' now = time.time() th_date = 14 old_dt = now - th_date * 86400 for curdir, dirs, files in os.walk(path): for dir in dirs: target = join(curdir, dir) if os.path.getmtime(target) < old_dt: print(target) shutil.rmtree(target, ignore_errors=True) |
プログラムのポイントを解説します。
1 2 3 4 | import os import time import sys import shutil |
必要なモジュールをインポートします。
ファイル操作用に os
、日時操作用に time
、システム情報取得用に sys
、ディレクトリ削除用に shutil
をインポートします。
1 | sys.setrecursionlimit(10000) |
再帰数の上限値を設定しています。
Pythonでは再帰数の上限がデフォルトで設定されていて、1000までになっています。
対象のディレクトリが1000以上になる場合は、上限値を変更します。
1 2 3 4 | path = 'temp' now = time.time() th_date = 14 old_dt = now - th_date * 86400 |
削除対象のディレクトリが格納されるパス path
、削除判定のしきい値とする日数 th_date
を設定します。time.time()
で取得した結果は秒のため、日数に 24(時)× 60(分)× 60(秒)をかけて、削除対象を判定するしきい値の更新日 old
を算出します。
1 | for curdir, dirs, files in os.walk(path): |
os.walk(path)
で監視対象パスの中のディレクトリ、ファイルを抽出します。
使用方法は以下の記事で解説しています。
・関連記事:Pythonでディレクトリ名・ファイル名の一覧取得(os, glob)
デフォルトの検索順序はトップダウンになるため、更新日時が混在している場合に、更新日が新しいものも削除されてしまいます。
その場合には os.walk(path, topdown=Flase)
として、検索順序をボトムアップに変更して、新しいディレクトリが削除されないように、最下層から削除していきます。
1 2 | for dir in dirs: target = os.path.join(curdir, dir) |
os.path.join()
で取得したディレクトリ名を結合して削除対象のパスを生成し target
に格納します。
1 2 3 | if os.path.getmtime(target) < old_dt: print(target) shutil.rmtree(target, ignore_errors=True) |
os.path.getmtime()
でディレクトリの最終内容更新日時を取得して、しきい値の old_dt
と比較します。
・関連記事:日時処理-ファイルの作成日時・更新日時を取得
しきい値より前の更新日時の場合は、shutil.rmtree()
で中身も含めて削除します。ignore_erros=True
とする事で、既に削除済のディレクトリを削除する際のエラーを無視します。
・関連記事:Pythonでディレクトリ(フォルダ)の作成・削除(pathlib, shutil)
os.walk()
の検索順序がボトムアップの場合はエラーは発生しませんが、処理速度や負荷を考慮すると、トップダウンの方が有利です。
以上で、ディレクトリの更新日時の古いディレクトリを削除する方法の解説は終了です。