Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法


list

photo credit: Allison Mickel Best for Last via photopin (license)

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

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

前回の記事はコチラ。

Pythonでファイルの作成日時・更新日時・アクセス日時を取得する方法
非エンジニア&Windowsユーザー向けにPythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。今回はPythonでファイルの作成日時・更新日時・アクセス日時を取得する方法です。

ファイルが「古い」かどうかを判定するために、ファイルの作成日時を取得する方法をお伝えしました。

とは言いつつも、フォルダの中にはZIP以外のファイルもありますよね…。

ということで、今回はPythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法についてお伝えします。

スポンサーリンク

前回のおさらいと目標の確認

前回作ったコードをはコチラ。

import os
print(os.path.getctime('test_20170910.zip'))

おさらいも何も、指定したZIPファイルの作成日時をエポック秒で取得するだけのスクリプトでしたね…

ちなみに、今回対象としているフォルダはこちらです。

Pythonで古いファイルを削除するフォルダ

目標としては、フォルダ内のZIPファイルの数が3つを超えたら、古い順に削除をしていきたいと思っています。

プログラムの流れとしては、以下のようなものを目指していきたいわけです。

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

os.listdir関数でフォルダ内の全てのファイルについてループをする

では、まずフォルダ内のファイルについてループする方法を考えましょう。

そこで、フォルダ内のフォルダやファイルについてのリストを返す便利なos.listdir関数というものがあります。

os.listdir(path)

pathはフルパスや相対パスでも指定できますが、省略した場合は、作業フォルダが対象となります。

リストで取得できますから、for文を使ってループを回すことができます。

前述のフォルダについて、以下スクリプトを実行してみましょうか。

import os
for file in os.listdir():
    print(file)

実行をしますと、以下のようにフォルダ内のファイル(とフォルダ)が出力されます。

Pythonでフォルダ内のファイル・フォルダ一覧を出力

ただ、あれですね。ZIPファイルだけじゃなくて、pyファイルも含まれちゃってますね。

目標としては、ZIPファイルだけを削除対象としたいので、それだけを取り出す工夫が必要です。

特定の拡張子のファイルだけ取得する

パッと思いつくのは、ファイルの拡張子を獲得して、ZIPファイルかどうかをif文で判定するような処理ですよね。

os.path.splitext関数でパスをベースと拡張子に分割する

そんなときに使える、os.path.splitext関数というものがあります。

os.path.splitext(path)

os.path.splitext関数は、pathをbase(拡張子以外の部分)とext(ピリオドを含む拡張子)に分割して、タプルで返します。

以下スクリプトを実行してみましょうか。

import os
for file in os.listdir():
    print(os.path.splitext(file))

Pythonでファイル名をベースと拡張子に分割してタプル化

バッチリ拡張子がわかりますね。

タプルを複数の変数に代入する

タプルは、以下書式で各要素を変数に格納できます。

変数1, 変数2,… = (要素1, 要素2,…)

ですから、例えば以下のようにすれば、ベースネームと拡張子をそれぞれ取得できるというわけです。

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))

以下のように、ちゃんと拡張子が取得できていますね。

Pythonでフォルダ内のファイルの拡張子を取得

拡張子により条件分岐する

あとは、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))

この実行結果がコチラ。

Pythonでフォルダ内のZIPファイルのみ抽出

ちゃんとZIPファイルだけ出力されましたね。

まとめ

Pythonでフォルダ内の特定の拡張子のファイルだけ抽出する方法をお伝えしました。

  • os.listdir関数でフォルダ内の全てのファイル・フォルダをリスト化する
  • os.path.splitext関数でファイル名のベースと拡張子を分割してタプル化する
  • タプルを複数の変数に格納する

といったテクニックを学びました。

さて、次回ですが、抽出したファイルのファイル名と作成日時をリスト化する方法についてお伝えします。

どうぞお楽しみに!

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

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

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

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