はじめに
Pythonでファイル名のリストなどを通常のソートを使って整列すると以下のようになってしまいます。
サンプルコード
file_list = ["file_9","file_12","file_40","file_29","file_3"]
print("ソート前:", file_list)
file_list = sorted(file_list)
print("ソート後:", file_list)
実行結果
ソート前: ['file_9', 'file_12', 'file_40', 'file_29', 'file_3']
ソート後: ['file_12', 'file_29', 'file_3', 'file_40', 'file_9'] <-- 意図しない整列
それを解消するための関数を作ります。
実装
reモジュールを使って実装します。
import re
def natural_sort(text):
return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
実行例
サンプルコード
import re
def natural_sort(text):
return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
file_list = ["file_9","file_12","file_40","file_29","file_3"]
print("ソート前:", file_list)
file_list = sorted(file_list)
print("改良前:", file_list)
file_list = sorted(file_list, key=natural_sort)
print("改良後:", file_list)
実行結果
ソート前: ['file_9', 'file_12', 'file_40', 'file_29', 'file_3']
改良前: ['file_12', 'file_29', 'file_3', 'file_40', 'file_9']
改良後: ['file_3', 'file_9', 'file_12', 'file_29', 'file_40']
おわりに
これでPythonを使ったファイル整理が捗りそうですね。