LoginSignup
10
5

More than 1 year has passed since last update.

【Python】globで取得したファイルリストの並び替え

Last updated at Posted at 2021-08-18

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

10
5
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
10
5