gpt4 book ai didi

python - Unix排序——字符比较算法

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:24 25 4
gpt4 key购买 nike

我需要像 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 对文件进行排序,但这次使用 Python 正确的比较算法?

更新

下面的 Python 输出示例(与 Unix sort 工具的输出不一致):

>>> '250,1' > '25,8'
True
>>> '250,' > '25,'
True

与 Unix sort 工具相反,在 Python 中,两种比较都会给出相同的结果。

最佳答案

您可以通过以下方式确认区域设置是罪魁祸首:

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']

关于python - Unix排序——字符比较算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com