python - 如何对具有负数和字符的字符串进行自然排序?

标签 python string list sorting natural-sort

我有一个需要打开的文件名列表,但是,文件名包含连字符“-”,操作系统或 Windows 10 自然不会将其识别为负数。例如,列表本身被导入为

['-001.000ps.csv',
 '-100.000ps.csv',
 '0000.000ps.csv',
 '0001.000ps.csv',
 '0002.000ps.csv',
 '0003.000ps.csv',
 '0003.500ps.csv',
]

其中 -1 位于 -100 之前。 -1 和 -100 的位置需要颠倒,并且我需要保留前导零和“ps.csv”组件,因为文件是这样命名的。

我尝试了在这个 stackexchange 上找到的一些解决方案,但是,大多数人想要处理的是搜索正数并对其进行排序。对于natsort package ,发生的情况是 -1 和 -100 被放置在列表的底部。

将这些字符串转换为整数或 float 失败,我猜是因为 ps.csv 位于元素内部。

我从 blogpost referenced here 复制粘贴了解决方案并且出现同样的问题。我觉得我在这里遗漏了一些明显的东西,为什么负数不起作用?

最佳答案

natsort can be used to sort signed numbers像这样:

fnames = [
    '-001.000ps.csv',
    '-100.000ps.csv',
    '0000.000ps.csv',
    '0001.000ps.csv',
    '0002.000ps.csv',
    '0003.000ps.csv',
    '0003.500ps.csv',
]

natsort.realsorted(fnames)
natsort.natsorted(fnames, alg=natsort.ns.REAL)

这两者都会产生相同的输出:

['-100.000ps.csv',
 '-001.000ps.csv',
 '0000.000ps.csv',
 '0001.000ps.csv',
 '0002.000ps.csv',
 '0003.000ps.csv',
 '0003.500ps.csv']

关于python - 如何对具有负数和字符的字符串进行自然排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74158071/

相关文章:

python - 如何将 while 循环中的数据放入表中?

python - 如何使用 scikit-learn 可视化两个类的边界/决策函数

python - 在 Pandas 中查找具有相同列值的数据框行

python - 在 matplotlib(或 seaborn)中为 x 值着色并显示在图例中,而不是显示为刻度

python - 循环删除列表项

arrays - 在 if 语句中过滤带有空字符串的字符串,iOS

java - 将空格移到字符串的前面?

java - 对对象数组使用 toString

python - 重新排序列表以匹配另一个

元组的 Python 数组首先分组,然后存储