みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
プログラミング初心者&Windowsユーザー向けPythonでフォルダ内の古いファイルを自動で削除するツールの作り方をお伝えしています。
前回の記事はコチラ。
ファイルが「古い」かどうかを判定するために、ファイルの作成日時を取得する方法をお伝えしました。
とは言いつつも、フォルダの中にはZIP以外のファイルもありますよね…。
ということで、今回はPythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法についてお伝えします。
前回のおさらいと目標の確認
前回作ったコードをはコチラ。
import os
print(os.path.getctime('test_20170910.zip'))
おさらいも何も、指定したZIPファイルの作成日時をエポック秒で取得するだけのスクリプトでしたね…
ちなみに、今回対象としているフォルダはこちらです。
目標としては、フォルダ内のZIPファイルの数が3つを超えたら、古い順に削除をしていきたいと思っています。
プログラムの流れとしては、以下のようなものを目指していきたいわけです。
- フォルダ内のファイルを全てについてループする
- その中でZIPファイルがあれば作成日時とファイル名をリスト化する
- リストの数が3を超えていたら、作成日時が古いファイルを削除する
os.listdir関数でフォルダ内の全てのファイルについてループをする
では、まずフォルダ内のファイルについてループする方法を考えましょう。
そこで、フォルダ内のフォルダやファイルについてのリストを返す便利なos.listdir関数というものがあります。
pathはフルパスや相対パスでも指定できますが、省略した場合は、作業フォルダが対象となります。
リストで取得できますから、for文を使ってループを回すことができます。
前述のフォルダについて、以下スクリプトを実行してみましょうか。
import os
for file in os.listdir():
print(file)
実行をしますと、以下のようにフォルダ内のファイル(とフォルダ)が出力されます。
ただ、あれですね。ZIPファイルだけじゃなくて、pyファイルも含まれちゃってますね。
目標としては、ZIPファイルだけを削除対象としたいので、それだけを取り出す工夫が必要です。
特定の拡張子のファイルだけ取得する
パッと思いつくのは、ファイルの拡張子を獲得して、ZIPファイルかどうかをif文で判定するような処理ですよね。
os.path.splitext関数でパスをベースと拡張子に分割する
そんなときに使える、os.path.splitext関数というものがあります。
os.path.splitext関数は、pathをbase(拡張子以外の部分)とext(ピリオドを含む拡張子)に分割して、タプルで返します。
以下スクリプトを実行してみましょうか。
import os
for file in os.listdir():
print(os.path.splitext(file))
バッチリ拡張子がわかりますね。
タプルを複数の変数に代入する
タプルは、以下書式で各要素を変数に格納できます。
ですから、例えば以下のようにすれば、ベースネームと拡張子をそれぞれ取得できるというわけです。
base, ext = os.path.splitext(file)
では、こちらも確認してみましょうか。
以下スクリプトを実行してみてください。
import os
for file in os.listdir():
base, ext = os.path.splitext(file)
print('file:{},ext:{}'.format(file,ext))
以下のように、ちゃんと拡張子が取得できていますね。
拡張子により条件分岐する
あとは、if文を使って条件判断してあげればOKですね。
例えば、拡張子が「.zip」のものだけ出力するのであれば、以下のようなスクリプトにすればよいです。
import os
for file in os.listdir():
base, ext = os.path.splitext(file)
if ext == '.zip':
print('file:{},ext:{}'.format(file,ext))
この実行結果がコチラ。
ちゃんとZIPファイルだけ出力されましたね。
まとめ
Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法をお伝えしました。
- os.listdir関数でフォルダ内の全てのファイル・フォルダをリスト化する
- os.path.splitext関数でファイル名のベースと拡張子を分割してタプル化する
- タプルを複数の変数に格納する
といったテクニックを学びました。
さて、次回ですが、抽出したファイルのファイル名と作成日時をリスト化する方法についてお伝えします。
どうぞお楽しみに!
連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム
フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。