Pythonのglob
モジュールは、Unixシェルのルールに基づいて指定されたパターンに一致するすべてのパス名を見つけますが、結果は任意の順序で返されます。しかし、ファイルのリストを特定の順序で取得したい場合があります。そのような場合には、glob.glob()
の結果をソートする方法があります。
例えば、次のようなコードがあります:
import os, glob
path = '/home/my/path'
for infile in glob.glob( os.path.join(path, '*.png') ):
print(infile)
このコードは、指定したパス内のすべての.png
ファイルを見つけて表示します。しかし、表示されるファイルの順序は保証されません。
ファイルを特定の順序で取得するには、sorted()
関数を使用します。sorted()
関数は、リストの要素をソートした新しいリストを返します。この関数にはkey
引数があり、これを使用してソートの基準を指定することができます。
さらに、自然な順序(例えば、['1', '2', '10']
ではなく['1', '10', '2']
)でソートしたい場合は、natsort
ライブラリを使用すると便利です。
import glob
from natsort import natsorted
filepath = 'data/'
filelist = glob.glob(filepath + '*.wav')
new_filelist = natsorted(filelist)
このコードは、glob.glob()
で取得したファイルリストを自然な順序でソートします。
以上のように、Pythonのglob
モジュールと組み込み関数sorted()
、またはnatsort
ライブラリを使用することで、ファイルのリストを任意の順序で取得することができます。