この記事では、特定のフォルダの中にある特定の拡張子ファイルだけを取得する方法を解説していきます。
ここでは、jpgファイルとpngファイルが入り混じっているフォルダの中からjpgファイルだけを取得し、それらをpngファイルに変換する方法を解説していきます。
この処理はPythonを使っていると頻繁に出てきます。
他にも、特定のフォルダ内にある画像に対してぼかしを入れる・マスク処理をするなど、同じ処理をしたい時などに使うことができます。
早速解説していきます。
フォルダ内の特定の拡張子を取得して処理する方法(pngファイルをpngファイルに変換)
初めに、今回例題として扱うフォルダ構成をご覧ください。
このように、test_root
というフォルダの中に、2つのJPGファイル
と3つのPNGファイル
が入っているフォルダを想定しています。
もし可能であれば、お手元に同じフォルダを作ってみてください。
では、順序立って解説していきます。
まずはフォルダ内のファイル名を一括取得する方法について解説します。
フォルダ内のファイル名を一括取得
フォルダ内のファイル名を一括取得するには、os.listdir(path)
を利用します。
import os
# test_root内にあるファイル一覧を取得
for file in os.listdir('./test_root'):
print(file)
# 出力結果
jpg_file1.jpg
jpg_file2.jpg
png_file1.png
png_file2.png
png_file3.png
このように、特定のフォルダ内にあるファイル一覧を取得できます。
では次に、特定の拡張子だけを取得する方法について解説していきます。
フォルダ内の特定の拡張子を取得
この例では、pngファイルのみを取得してみたいと思います。
拡張子の選別のために使うのは、os.path.splitext(path)
という関数を使います。
これを使うことで、base(拡張子以外の名前部分)とext(拡張子)の2つに分割することができます。
ファイル名を分割したのちに、ext(拡張子)がpngであれば出力するとしています。
import os
# jpgファイルのみを取得する
for file in os.listdir('./test_root'):
base, ext = os.path.splitext(file)
if ext == '.jpg':
print(file)
# 出力結果
jpg_file1.jpg
jpg_file2.jpg
ここまでで、特定の拡張子のパスを取得することが出来るようになったかと思います。
最後に、取得したjpgファイルをpngファイルに変換する処理を加えていきます。
フォルダ内のpngファイルを、jpgファイルに変換する方法
pillowライブラリ
を使って、jpgファイルをpngファイルへ変換していきます。
import os
from PIL import Image
# ターゲットとなるフォルダを指定。
target_folder = './test_root'
# 拡張子がjpgのファイルを抽出し、pngに変換して保存する
for file in os.listdir(target_folder):
base, ext = os.path.splitext(file)
if ext == '.jpg':
im = Image.open(target_folder + '/' + file)
im.save(target_folder + '/' + base + '.png')
print(file)
#出力結果
jpg_file1.jpg
jpg_file2.jpg
実行した後のフォルダの中身を実行前と比較します。
実行前のフォルダ
実行後のフォルダ
jpg_file1.pngとjpg_file2.pngがそれぞれjpgファイルに変換されていることが確認できました。
今回は、特定のフォルダ内の特定の拡張子を取得し、それらに対して処理を加えるプログラムの解説を行いました。
例として、フォルダ内のpngファイルを全てjpgファイルに変換しました。
同じような処理をフォルダ内の特定のファイルに実施したいシーンなど、活用用とは多いと思います。
ぜひご活用ください。