Python3で指定されたパス内の、画像のファイル名一覧を取得する方法についてです!
ちょっと変えれば、特定の拡張子を検索することも簡単にできます。
ソース
こんな感じで作りしました。
import os import re def listupImage(path): # 取得したものから画像(jpg/png)のみPickup patternStr = '.+\.(jpg|png)' pattern = re.compile(patternStr) listup = [] for item in os.listdir(path): result = pattern.match(item) # resultがNone以外=画像 なのでパスをリストに追加 if result: listup.append(path + '\\' + item) i = 0 for item in listup: print(i + ' : ' + item) return listup
パスを渡すと、画像ファイルのパス一覧を返してくれます。
importするもの
importするのはこの2つです。
import os import re
それぞれ
- os : OS関連の機能を扱うもの
- re : 正規表現を扱うもの
というものです。
ファイル一覧を取得する
ファイル一覧を取得するには
os.listdir(path):
のようにします。
これで指定したフォルダ内にあるファイル/フォルダの一覧を取得できます。
for item in os.listdir(path): print(item)
動作確認
このような構成のフォルダがあるとします。
dir1 dir2 file.txt img1.png img2.png img3.jpg
これで「os.listdir()」を実行すると
['dir1', 'dir2', 'file.txt', 'img1.png', 'img2.png', 'img3.jpg']
という結果が返ってきます。
リストで中身の名称一覧が返ってくるわけですね!
画像ファイルだけ抽出
今回画像として取り扱うファイルは、
- PNG
- JPG
の2つとします。
patternStr = '.+\.(jpg|png)' pattern = re.compile(patternStr) for item in os.listdir(path): result = pattern.match(item) # resultがNone以外=画像 なのでパスをリストに追加 if result: print(item + 'は画像だよ!')
これをループでチェックしていき、正規表現のパターンマッチを行っていきます。
正規表現は、特定のパターンを作って、「それと一致する?」などを検索したりできる仕組みです。
今回の場合
patternStr = '.+\.(jpg|png)'
という箇所が、パターンの記述です。
これは
<適当な文字列>.<jpgかpng>
を表します。
今回画像ということで、jpgかpngとしていますが、ここを特定の拡張子に変更することで、なんでも検索できます。
コレを事前にコンパイル……つまり、すぐ正規表現での処理が行える状態にします。
pattern = re.compile(patternStr)
あとは
for item in os.listdir(path): # 1 result = pattern.match(item) # 2 if result: # 3 print(item + 'は画像だよ!')
とすることで、
- os.listdir()でフォルダ内の一覧を取得
- ループで順々に処理していく
- 「itemがパターンとマッチするか?」をチェックする
- 結果がマッチしていたら、出力
ということをしています。
動作確認
先程と同じ構成で実行した場合、「os.listdir(path)」の結果は
['dir1', 'dir2', 'file.txt', 'img1.png', 'img2.png', 'img3.jpg']
ですね。
これで実行すると……
img1.pngは画像だよ! img2.pngは画像だよ! img3.jpgは画像だよ!
と表示されます。
ちゃんと画像だけ出力されましたね!
参考
コチラを参考にしました。ありがとうございました!
あとがき
ということで、Pythonで指定されたパス内の、画像のファイル名一覧を取得する方法でした!