>> -6ren">
gpt4 book ai didi

Python 在 "u11-Phrase 1000.wav"之前对 "u11-Phrase 101.wav"进行排序;我怎样才能克服这个?

转载 作者:太空狗 更新时间:2023-10-29 22:01:30 27 4
gpt4 key购买 nike

我在 win 32 上运行 Python 2.5(r25:51908,2006 年 9 月 19 日,09:52:17)[MSC v.1310 32 位(英特尔)]

当我问 Python 时

>>> "u11-Phrase 099.wav" <  "u11-Phrase 1000.wav"
True

没关系。当我问

>>> "u11-Phrase 100.wav" <  "u11-Phrase 1000.wav"
True

这也很好。 但是当我问

>>> "u11-Phrase 101.wav" <  "u11-Phrase 1000.wav"
False

所以根据 Python,“u11-Phrase 100.wav”出现在“u11-Phrase 1000.wav”之前,但“u11-Phrase 101.wav”出现在“u11-Phrase 1000.wav”之后!这对我来说是有问题的,因为我正在尝试编写一个文件重命名程序,而这种排序破坏了功能。

我该怎么做才能克服这个问题?我应该编写自己的 cmp 函数并测试边缘情况,还是有更简单的快捷方式来提供我想要的顺序?

另一方面,如果我修改字符串,例如

>>> "u11-Phrase 0101.wav" <  "u11-Phrase 1000.wav"
True

但是这些字符串来自目录的文件列表,例如:

files = glob.glob('*.wav')
files.sort()
for file in files:
...

所以我宁愿在 glob 创建字符串后不对其进行外科手术。不,我也不想更改该文件夹中的原始文件名。

有什么提示吗?

最佳答案

您正在寻找human sorting .

101.wav 不小于 1000.wav 的原因是计算机(不仅仅是 Python)按字符对字符串进行排序,这两个字符串之间的第一个区别是第一个字符串有 '1',第二个字符串字符串有一个'0'。 “1”不小于“0”,因此字符串比较如您所见。

人们很自然地将这些字符串解析成它们的组成部分,并以数字而非词汇的方式解释数字。我上面链接的代码将执行相同类型的解析。

关于Python 在 "u11-Phrase 1000.wav"之前对 "u11-Phrase 101.wav"进行排序;我怎样才能克服这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1940056/

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