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では, 辞書順に並び替えられます.