lisz-works

技術と興味の集合体

Python3→フォルダ内の画像ファイルのパス一覧を取得

【スポンサーリンク】

Python

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

それぞれ

  1. os : OS関連の機能を扱うもの
  2. 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']

という結果が返ってきます。

リストで中身の名称一覧が返ってくるわけですね!

画像ファイルだけ抽出

今回画像として取り扱うファイルは、

  1. PNG
  2. 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 + 'は画像だよ!')

とすることで、

  1. os.listdir()でフォルダ内の一覧を取得
    1. ループで順々に処理していく
  2. 「itemがパターンとマッチするか?」をチェックする
  3. 結果がマッチしていたら、出力

ということをしています。

動作確認

先程と同じ構成で実行した場合、「os.listdir(path)」の結果は

['dir1', 'dir2', 'file.txt', 'img1.png', 'img2.png', 'img3.jpg']

ですね。
これで実行すると……

img1.pngは画像だよ!
img2.pngは画像だよ!
img3.jpgは画像だよ!

と表示されます。

ちゃんと画像だけ出力されましたね!

参考

コチラを参考にしました。ありがとうございました!

automatetheboringstuff.com

あとがき

ということで、Pythonで指定されたパス内の、画像のファイル名一覧を取得する方法でした!