Pythonのglobでファイルを昇順で読み込む

2020年8月27日

file image

glob.glob()でファイルを読み込んだとき、ファイル名が数字であっても昇順に読み込めないことがある。

例えば、数字の小さなファイル名順に読み込んで欲しいのに、実際は 1.jpg、10.jpg、2.jpg、20.jpg のように読み込んでしまう。

そんなときは、「natsort」というライブラリを使う。

ちなみに、Pythonの標準ライブラリではないのでプロンプトから pip でインストールして使ってください。

> pip install natsort

natsortライブラリ使用時

from natsort import natsorted

# photo フォルダに、1.jpg、10.jpg、2.jpg、20.jpg が入っているとします。

files = glob.glob("./photo" + "/*.jpg") 
for i in natsorted(files):
    print("file:", i)
>
file: ./photo\1.jpg
file: ./photo\2.jpg
file: ./photo\10.jpg
file: ./photo\20.jpg

読み込んだファイルは自然順( 1.jpg、2.jpg、10.jpg、20.jpg )になる。

glob.glob()の場合

# photo フォルダに、1.jpg、10.jpg、2.jpg、20.jpg が入っているとします。

files = glob.glob("./photo" + "/*.jpg") 
for i in files:
    print("file:", i)
>
file: ./photo\1.jpg
file: ./photo\10.jpg
file: ./photo\2.jpg
file: ./photo\20.jpg

読み込んだファイルが辞書順( 1.jpg、10.jpg、2.jpg、20.jpg )になる。