使い終わった壁紙を自動で削除したい!
「東京ディズニーリゾートの壁紙を毎月自動でダウンロード・設定するプログラムを作った!」と友人に話をしたところ、「昔の壁紙は消えないの??」と聞かれました。
私は何かと記念に残しがちですが、よくよく考えれば確かに要らない気がするので、ダウンロードするタイミングで削除しちゃおうと思います。
前回の記事はこちら↓
ざっくりフローチャート
前回の記事で、「今月の壁紙が指定フォルダに格納されていない場合、壁紙をダウンロードする。」という条件分岐を追加したので、壁紙をダウンロードする処理の前に、古い壁紙を削除する処理(オレンジ部分)を追加します。
削除対象ファイルのリストアップ
まずは削除対象のファイルをリストアップします。
wallpaper_yyyymm_1.jpg
という名前のファイルを検索します。
今月の壁紙をダウンロードする前なので、対象のファイルを一度すべて消しちゃいます。
「先月の画像を削除する」という方法も考えましたが、1カ月以上パソコンをインターネット環境に接続しない場合に昔の壁紙が残ってしまうため、前の月以前の壁紙はすべて削除することにしました。
import glob
rmpic = glob.glob(r'C:\Users\ayk_f\wallpaper\wallpaper_*_1.jpg')
print(rmpic)
glog.glog(<full_path>)
で正規表現を利用し対象ファイルを指定します。
glog
とは python のモジュールの一つで、特定のパターンにマッチするファイルを取得することができます。
今回のように、wallpaper_*_1.jpg
に当てはまるファイルを抽出する、といった場合に使えるみたいです。
$ ls
code/ wallpaper_202012_1.jpg wallpaper_202108_1.jpg wallpaper_202109_1.jpg
フォルダの中身はこんな感じです。
wallpaper_202012_1.jpg
, wallpaper_202108_1.jpg
, wallpaper_202109_1.jpg
の3つが抽出できればOKです。
$ python wallpaper_v3.0.py
['C:\\Users\\ayk_f\\wallpaper\\wallpaper_202012_1.jpg', 'C:\\Users\\ayk_f\\wallpaper\\wallpaper_202108_1.jpg', 'C:\\Users\\ayk_f\\wallpaper\\wallpaper_202109_1.jpg']
対象の3つのファイルがフルパスで抽出できました。
抽出した画像の削除
対象ファイルの抽出ができたので、ファイルを削除します。
for文
を用いて対象ファイル分だけ削除を実施する、という動きになります。
for t in rmpic:
print("remove;{0}".format(t))
os.remove(t)
おそらくですが、リストの0つ目、1つ目、2つ目・・・のように削除するみたいです。
ファイル名に整数が入っている必要はないみたいです。
※私はファイル名が wallpaper_1.jpg
, wallpaper_2.jpg
, wallpaper_3.jpg
のようなファイルにしておかないといけないと勘違いしていたので、結構混乱しました・・・。
$ python wallpaper_v3.0.py
['C:\\Users\\ayk_f\\wallpaper\\wallpaper_202012_1.jpg', 'C:\\Users\\ayk_f\\wallpaper\\wallpaper_202108_1.jpg', 'C:\\Users\\ayk_f\\wallpaper\\wallpaper_202109_1.jpg']
remove;C:\Users\ayk_f\wallpaper\wallpaper_202012_1.jpg
remove;C:\Users\ayk_f\wallpaper\wallpaper_202108_1.jpg
remove;C:\Users\ayk_f\wallpaper\wallpaper_202109_1.jpg
remove;<full_path>
で削除したファイルが出力されました。
$ ls
code/
削除も無事にできています!
これで今回の任務は完了です。
さいごに
今回もプログラムの改版でした。
日曜大工的な感覚でやってますが、思った通りに動き出すと楽しいですね。
いつかは他の人でも使えるように、画像の格納先を最初に登録するような挙動も入れたいな・・・・と思ったり。
人に「こんなの作ったよ!」って話すことで、思ってもなかった意見がもらえるのでそれも楽しかったです。