在python 3(特别是python 3.10.6)中,如何改变os.walk(path)
对找到的文件进行排序的方式?
IMG0001.jpg
IMG0002.jpg
IMG0002(1).jpg
IMG0002(2).jpg
IMG0003.jpg
如果每个(n)
重复文件都排在原始文件之后,您将如何按此顺序对其进行排序?目前,os.walk(path)
是这样排序的:
IMG0001.jpg
IMG0002(1).jpg
IMG0002(2).jpg
IMG0002.jpg
IMG0003.jpg
我想主要的问题是默认的排序方法给(
(还有-
)的排序值比给扩展中的.
的排序值要高,如果这在这里是正确的,你将如何修改哪些特殊字符排在其他字符之前呢?
我试过使用sorted(files)
,但是它的排序方式和os.walk(path)
一样。如果我尝试sorted(files, reverse=True),
,那么当原件排在副本之前时,多个副本现在向后排序,所有原件也向后排序,即:
IMG0003.jpg
IMG0002.jpg
IMG0002(2).jpg
IMG0002(1).jpg
IMG0001.jpg
2条答案
按热度按时间tcomlyy61#
字符串排序是按字典顺序的,所以如果你想做些不同的事情,你需要一个自定义的排序键。这比预期的要复杂一些,但是类似下面的东西应该可以工作:
现在,您应该能够使用类似
files.sort(key=key)
的代码。6tr1vspr2#
使用
pathlib.Path
可以更好地理解文件名语义,构建一个以特殊情况为前导元素、文件名为结尾的元组,对元组列表进行排序,但只保留最后一个元素。输出:
我检查了
tupleize
(元组的参数)是否可以用作sort
的key
参数。也就是说
sorted(inp,key=tupleize)
也能工作Wim是对的,这是失败的不同的延伸。修复与调整如下: