Pythonでフォルダ内の古いファイルを削除するスクリプトを作る方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

プログラミング初心者向け、Windowsユーザー向けにPythonでフォルダ内の古いファイルを自動で削除するツールの作成方法についてお伝えしています。

前回の記事はこちら。

Pythonでリストに要素を追加をする方法、リストの要素を並び替えをする方法
プログラミング初心者&Windowsユーザー向け、Pythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。今回はリストに要素を追加をする方法、リストの要素を並び替えをする方法です。

リストの要素を追加する方法、リストの要素を並び替えする方法をお伝えしました。

つまり、以下手順でいうと2までできたというところですね。

  1. フォルダ内のファイルを全てについてループする
  2. その中でZIPファイルがあれば作成日時とファイル名をリスト化する
  3. リストの数が3を超えていたら、作成日時が古いファイルを削除する

今回はいよいよ、os.remove関数を使いつつ、フォルダ内の古いファイルを自動で削除するスクリプトを完成させます。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

では、まず前回のおさらいから。

作成したスクリプトはこちらでした。

import os
from operator import itemgetter
filelists = []
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        filelists.append([file, os.path.getctime(file)])
filelists.sort(key=itemgetter(1), reverse=True)
print(filelists)

作業フォルダ内のファイルで、splitext関数で拡張子を取り出します。

それで、拡張子が「.zip」のものについて、appendメソッドを使って

  • ファイル名
  • ファイルの作成日時(エポック秒)

というセットでリスト化、そしてsortメソッドでファイル作成日時の降順で並び替えるというものです。

古いZIPファイルを削除するということは

古いZIPファイルをどのように判別するか、解説をしていきます。

まず。前述のスクリプトで作られたリストがどのようなものか、確認しておきましょう。

今回用意したZIPファイルについて、前述のスクリプトを実行すると、以下のような出力が得られました。

[
     ['test_20170915.zip', 1505220570.226773],
     ['test_20170914.zip', 1505220557.8220537],
     ['test_20170912.zip', 1505220473.88305],
     ['test_20170910.zip', 1505220473.867423],
     ['test_20170911.zip', 1505220473.867423],
     ['test_20170913.zip', 1505220473.8517387]
]

例えば、フォルダ内のZIPファイル数を3つまでに制限をするのであれば、インデックス3~5に該当するZIPファイルを削除すれば良いということになります。

削除対象となるファイルを洗い出すスクリプト

指定のファイル数を「MAX_CNT」という変数に設定して、その数を超えている場合に、削除対象となる古いZIPファイルかどうかを判定するスクリプトを作ってみました。

こちらのスクリプトです。

import os
from operator import itemgetter
filelists = []
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        filelists.append([file, os.path.getctime(file)])
filelists.sort(key=itemgetter(1), reverse=True)
MAX_CNT = 3
for i,file in enumerate(filelists):
    if i > MAX_CNT - 1:
        print('{}は削除します'.format(file[0]))

9行目で、変数MAX_CNTに最大のファイル数を指定しています。

そして、8行目はリストfilelistsについてループを回す箇所ですが、enumerate関数を使っていますので、変数とインデックスを両方取り出せます。

Pythonでリストのforループでインデックスと要素の両方を取り出して繰り返す方法
Pythonで初心者でも簡単にできるクリックボードを使ったツールの作り方をお伝えしています。今回はPythonのリストのforループで要素とともにインデックス番号も取り出す方法についてお伝えします。

さらに、そのループ内のif文で、インデックスが、ファイル数-1(インデックスは0始まりですので-1をしています)より大きければ、そのファイルは削除対象ということになります。

実行結果はコチラです。削除対象となる3つのファイルが洗い出されました。

Pythonでフォルダ内の古いファイルを洗い出す

remove関数でファイルを削除する

さあ、あとはファイルを削除するだけです。os.remove関数を使います。

os.remove(path)

pathはフルパスでも良いですし、今回の場合は作業フォルダなので、ファイル名だけになります。

なお、remove関数はゴミ箱移動ではなく、完全削除です。使うときは慎重にどうぞ。

指定数を超えたら古いファイルを削除するスクリプト

これを使ってフォルダ内の指定数を超えた分、古いファイルを削除するスクリプトを作りました。

コチラです。

import os
from operator import itemgetter
filelists = []
for file in os.listdir():
    base, ext = os.path.splitext(file)
    if ext == '.zip':
        filelists.append([file, os.path.getctime(file)])
filelists.sort(key=itemgetter(1), reverse=True)
MAX_CNT = 3
for i,file in enumerate(filelists):
    if i > MAX_CNT - 1:
        os.remove(file[0])

実行すると、先ほどprintで出力したファイルたちが削除されました。

Pythonでフォルダ内の古いファイルを削除した

まとめ

以上、Pythonでフォルダ内の古いファイルを削除するスクリプトを作成しました。

このスクリプトをタスクマネージャ等に仕込めば、自動で古いファイルを削除してくれますよね。

本シリーズは以上になりますが、また便利なツールを紹介していきますね。

どうぞお楽しみに!

連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム

フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。

  1. Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
  2. Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法
  3. Pythonでリストに要素を追加をする方法、リストの要素を並び替えをする方法
  4. Pythonでフォルダ内の古いファイルを削除するスクリプトを作る方法

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