Wizard Notes

音楽信号解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です

Python:Pathクラスのリストをファイル名でソート

この記事をシェアする

f:id:Kurene:20191223213615p:plain

ソートされていないpathlibモジュールのPathクラスのリストをソートしたかったので、作ってみました。

トイデータ生成

順番がバラバラなPathクラスのリストがある*1状況を想定します。

from pathlib import Path
 
filelist = ["./dir/abb.ext", "./dir/aaa.ext", "./dir/bbb.ext", "./dir/aab.ext"]
filepathes = [Path(elm) for elm in filelist]
>>> filepathes
[WindowsPath('dir/abb.ext'), WindowsPath('dir/aaa.ext'), WindowsPath('dir/bbb.ext'), WindowsPath('dir/aab.ext')]

Pathクラスのリストを並べ替える関数

sortedの引数keyに、ファイル名を取り出すようなlambdaを与えます。

import os

def get_index_from_pathclass_by_filename(lst):
    return sorted(range(len(lst)), key=lambda k: os.path.split(lst[k])[1])

...

indices = get_index_from_pathclass_by_filename(filepathes)
filepathes_sorted = [filepathes[k] for k in indices]
>>> indices
[1, 3, 0, 2]
>>> filepathes_sorted
[WindowsPath('dir/aaa.ext'), WindowsPath('dir/aab.ext'), WindowsPath('dir/abb.ext'), WindowsPath('dir/bbb.ext')]

参考

*1:且、filelistがない状況