我有一个需要打开的文件名列表,但是,文件名包含连字符“-”,操作系统或 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/