こんにちは、しらすです。
先日ファイル読み込み時にglob.glob使った際、ファイル名の順番ではなくバラバラに読み込まれる状態でした。
解決策 sortedを使う
files = sorted(glob.glob('data/*.jpg'))
sortedを使うことでファイル名順に並べ替えて出力してくれます。
数字を含む場合のソート
ようやく完了!と思っていましたが、2桁以上の数字が入ってきたときに並び順が自然でなくなってしましました。。。。
辞書的に順番で出力すると上記のようになってしまいますが、本当は1から順に並んでほしいですね。
ということでsortedの引数 keyを使うことで解消できます!少しだけ複雑ですが以下をコピペすればOK。
import re
def atoi(text):
return int(text) if text.isdigit() else text
def natural_keys(text):
return [ atoi(c) for c in re.split(r'(\d+)', text) ]
files = sorted(glob.glob('data/*.jpg'), key=natural_keys)
ようやく無事数値順に並べることができました。
コメント