我需要以一致的方式对文件进行排序,因为Python会这样做。
我有一些使用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比较算法不一致。最后,我发现了两个有趣的案例:
$ echo -e "250,1\n25,8" | sort
250,1
25,8
$ echo -e "250,\n25," | sort
25,
250,
为什么这两个电话给我两个不同的订单?我认为这有点奇怪,因为起始字符保持不变,只有结束变化。
我的文件非常庞大,对我来说最好留在我当前的排序文件中。如何在Python中应用相同的字符串比较?
如果无法快速实施此比较,或者可能存在其他问题,我如何再次使用sort
对文件进行排序,但这次使用Pythonly正确的比较算法?
更新
下面的Python输出示例(与Unix sort
工具的输出不一致):
>>> '250,1' > '25,8'
True
>>> '250,' > '25,'
True
与Unix sort
工具相反,在Python中,两种比较都给出了相同的结果。
答案 0 :(得分:1)
你可以确认语言环境是罪魁祸首:
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
L = ['250,1', '25,8']
print(sorted(L, cmp=locale.strcoll))
#['250,1', '25,8']
locale.setlocale(locale.LC_ALL, 'C')
print(sorted(L, cmp=locale.strcoll))
#['25,8', '250,1']