前回のプログラムでわけがわからなくなってしまいました。以前の記事は↓です。
この「n日前の特定のファイルを削除するプログラム」が完成したので紹介したいと思います。(きった貼ったしただけ)
n日前の特定のファイルを削除する
import datetime, os, send2trash now = datetime.date.today()# 現在の日付を取得 #os.chdir()カレントは好きなところを選んでください。 for file in os.listdir(): mtime = datetime.date.fromtimestamp(int(os.path.getmtime(file))) base, ext = os.path.splitext(file) if (now - mtime).days >= 14: # 14日以上経過している場合は削除 if ext.endswith('.jpg') or ext.endswith('.png'): send2trash.send2trash(file)
このプログラムのポイント
一番難しいのは日付の計算かと思います。実際僕自身datetimeモジュールの使い方はあまりよくわかっていません。
5行目のforループではfor file in os.listdir()としています。oslistdir()関数は引数を何も指定しなければカレントディレクトリになり、ファイルをリストにします。それをfile変数に突っ込んで回します。
mtime = の部分は詳しく説明できる知識がありません。ただ、このプログラムは動きます。datetimeやint型の扱い方がかなめになってくる部分でしょう。次の7行目がおもしろいです。前回も説明しましたが、splitextはdirnameとbasenameに自動で振り分けて変数に入れてくれます。
dirnameとはパスの部分でbasenameは拡張子の部分です。問題は8行目でしょう。ここは型変換などを把握していないと理解に苦しむでしょう。実際僕も把握していません。ただこのプログラムは動きます。
次もポイントです。実は if ext == ‘.jpg’ などとすることもできます。しかしこの構文で動きを確認した結果、なぜかショートカットファイルまで消えてしまいました。そのためext.endswith()にしています。endswith()メソッドは引数の最後が同じだったらTrueです。
最後は間違って完全削除してしまわないようにsend2trash()メソッドでゴミ箱に送っています。send2trashは外部モジュールです。ですので、pip installをして下準備をしておく必要があります。
このプログラムは8行目の数字さえかえれば、わりと広い範囲に対応できると思います。しかし、「ここ」を消したい!とピンポインティングできてないのが心残りです。