みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
プログラミング初心者向け、Windowsユーザー向けにPythonでフォルダ内の古いファイルを自動で削除するツールの作成方法についてお伝えしています。
前回の記事はこちら。
リストの要素を追加する方法、リストの要素を並び替えする方法をお伝えしました。
つまり、以下手順でいうと2までできたというところですね。
- フォルダ内のファイルを全てについてループする
- その中でZIPファイルがあれば作成日時とファイル名をリスト化する
- リストの数が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関数を使っていますので、変数とインデックスを両方取り出せます。
さらに、そのループ内のif文で、インデックスが、ファイル数-1(インデックスは0始まりですので-1をしています)より大きければ、そのファイルは削除対象ということになります。
実行結果はコチラです。削除対象となる3つのファイルが洗い出されました。
remove関数でファイルを削除する
さあ、あとはファイルを削除するだけです。os.remove関数を使います。
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でツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。