日別アーカイブ: 2010/05/18

Human sort

Python の List で sort() しても Nautilus のファイル名順にならない。
Windows XP の時のように数値優先な自然順ソートをしなければならない。

我がアプリ Y901x のリストはデフォルトのソートをしているだけ。
気にしていたけど無名なのをいいことに今まで知らん顔していた(ぉい!

Windows XP には shlwapi に StrCmpLogicalW という API 関数があったんだが…
Linux なら glib や gio に関数がありそうなんだけどな…

PyGObject Reference Manual

見つからないし。
Nautilus のソースも落としたけど何が何やらサッパリワカンネ。
自力で自然順ソート関数を作っている人のコードを参考にしてみよう。

Ned Batchelder: Human sorting

コレやったらとりあえずうまくいった。

Python sorts “u11-Phrase 1000.wav” before “u11-Phrase 101.wav”; how can I overcome this? – Stack Overflow

コッチは isdigit を使っている、その手もあるか。
というか整数の正規表現ってこのどっちでもいいんだなとか変な発見。

return [ tryint(c) for c in re.split('([0-9]+)', s) ]
or
return [ tryint(c) for c in re.split(r'(\d+)', s) ]

しかしコレで完全に Nautilus と同じになるのだろうか?
とりあえず自分でもう少し試してみる。

それと playbin2 化したらよく落ちるようになったなぁ…
切り替え事の gtk.main_iteration を消したらかなり良くなったけどこれでいいのかな…