TL;DR
特定のディレクトリ内のファイル名を取得しリストを生成するコードを、os.walkによる2重for文の代わりに
を用いて正規表現で書き換えた。
いきさつ
画像の高解像度化がしたいと思い調べたところ、RAISRを実装したリポジトリが公開されていたのでさっそく導入。そのソースコードの中にちょっと気になる部分がありました。test.pyのこの部分とtrain.pyのこの部分になります。
imagelist = []
for parent, dirnames, filenames in os.walk(trainpath):
for filename in filenames:
if filename.lower().endswith(('.bmp', '.dib', '.png',
'.jpg', '.jpeg', '.pbm',
'.pgm', '.ppm', '.tif', '.tiff')):
imagelist.append(os.path.join(parent, filename))
trainpathに代入されている名前のディレクトリから、画像ファイルの名前を取得しimagelistにブチ込む処理をするコードです。しかし、2重for文なのでいささか冗長に感じます。
手直し
以下が手直ししたコードになります。
imagelist = [path
for path in glob.glob(trainpath + '/**', recursive=True)
if re.search('.(bmp|dib|png|jpg|jpeg|pbm|pgm|ppm|tif|tiff)', path.lower())]
endswithは引数に複数の文字列からなるタプルを渡す必要がありました。しかしre.searchは第一引数に1つの正規表現の文字列を渡すため、見た目がスッキリしますね。
ちなみに
Qiita初投稿なので、ご指摘・アドバイスいただけると筆者は喜びます。よろしくお願いします。
追記
改行位置、パスの小文字化に関するご指摘を頂いたので修正。(2019/7/4)