ファイルをPythonがそうするように一貫した方法でソートする必要があります。UNIXソート - 文字比較アルゴリズム
私はUNIXのsort
プログラムを使っていくつかのファイルをソートしました。このファイルをソートした後、私はそれが正しくソートされたかどうかをチェックするためのPythonスクリプトを書いた:スクリプトは次のエントリを与える失敗
with open('my_file_location') as f:
last_l = next(f)
for l in f:
if last_l > l:
print(last_l, l)
break
last_l = l
:
('250,8\n', '25,1\n')
を私がいるかどうかを確認するために、並べ替えツールでビットを実験しました出力は実際には反復可能であり、Pythonの比較アルゴリズムと矛盾しています。最後に、2つの興味深いケースが見つかりました:
$ echo -e "250,1\n25,8" | sort
250,1
25,8
$ echo -e "250,\n25," | sort
25,
250,
なぜこれらの2つのコールが私に2つの異なる注文を与えるのですか?私はちょっと変わったと思っています。なぜなら、最初の文字は変わらず変わらないからです。
私のファイルはかなり巨大で、私の現在のソートされたファイルにとどまるのが最良です。同じ文字列比較をPythonでどのように適用できますか?
この比較をすばやく実装できない場合や、その他の問題が発生する可能性がある場合は、sort
を使用してファイルを並べ替えるにはどうしたらよいですか?
UPDATE(Unixのsort
ツールの出力と一致しない)以下のPython出力の
例:
>>> '250,1' > '25,8'
True
>>> '250,' > '25,'
True
反してUnixのsort
ツールに、Pythonで両方の比較は、同じ結果を与えます。
(http://stackoverflow.com/questions/4836710/do-python-have-a-built-in-string-natural-sort) –
あなたの現在のロケールは 'sort'によって生成された順序に影響します - ' LC_ALL = C echo -e "250,1 \ n25、 | 8インチソート 'はあなたの例と一貫性があるはずです... – ewcz
@Chris_Randsなぜ' echo |ソート 'コールは2つの異なる注文を与え、なぜそれがPythonでは起こらないのですか?この例で質問が更新されました。 – pt12lol