globで取得したファイルリストの並び替え
glob.glob()でファイルを読み込んだ際, ファイル名の順番に困ったことはないでしょうか?
そんなときは,**「natsort」**というライブラリを使うと便利です.
フォルダの構造はこんな感じ
hoge/
└ data/
├ 1-a_n.wav
├ 2-a_n.wav
├ 3-a_n.wav
├ ...
├ 2575-a_n.wav
└ 2576-a_n.wav
まず, pipでインストール
pip install natsort
pip install glob
####1. ひとまず, globでファイルリストを取得
import glob
filepath = 'data/'
filelist = glob.glob(filepath + '*.wav') # jpg, png, csvなどお好みで
filelist
↓のように, ファイルの順番がでたらめ
['data/1034-a_n.wav',
'data/43-a_n.wav',
'data/1126-a_n.wav',
'data/124-a_n.wav',
'data/1703-a_n.wav',
'data/993-a_n.wav',
'data/701-a_n.wav',
'data/1883-a_n.wav',
...
きちんと, 番号順に並べたい...
####2. natsortを追加!
import glob
from natsort import natsorted
filepath = 'data/'
filelist = glob.glob(filepath + '*.wav')
new_filelist = natsorted(filelist)
new_filelist
実行すると,
['data/1-a_n.wav',
'data/2-a_n.wav',
'data/3-a_n.wav',
'data/4-a_n.wav',
'data/5-a_n.wav',
'data/6-a_n.wav',
'data/7-a_n.wav',
'data/8-a_n.wav',
...
番号の小さい順にできました!
####参考 (sortの場合)
import glob
filepath = 'data/'
filelist = glob.glob(filepath + '*.wav')
new_filelist = sorted(filelist)
new_filelist
['data/1-a_n.wav',
'data/10-a_n.wav',
'data/100-a_n.wav',
'data/1000-a_n.wav',
'data/1001-a_n.wav',
'data/1002-a_n.wav',
'data/1003-a_n.wav',
'data/1004-a_n.wav',
...
sortでは, 辞書順に並び替えられます.