0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Python】globとreで簡潔にファイル名を取得、リストを生成する

Last updated at Posted at 2019-07-04

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)

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?