与其他字符混合时,按数字顺序对文件名进行排序



我有以下代码部分,我打算以正确的顺序打印文件名:

for root, dirs, files in os.walk(path):
    sortedFiles = sorted(files)
    for file in sortedFiles[0:]:
        print file

这就是我得到的:

1.i.jpg
10.i.jpg
102.i.jpg
103.i.jpg
104.i.jpg
105.i.jpg
106.i.jpg
107.i.jpg
108.i.jpg
109.i.jpg
11.i.jpg
...
...
...

如何在1.i.jpg之后出现2.i.jpg等?也就是说,以数值正确的顺序顺序正确?

谢谢。

您可以与key

排序
files = ['1.i.jpg',
'10.i.jpg',
'102.i.jpg',
'103.i.jpg',
'104.i.jpg',
'105.i.jpg',
'106.i.jpg',
'107.i.jpg',
'108.i.jpg',
'109.i.jpg',
'11.i.jpg',
'2.i.jpg']
sorted(files, key=lambda x:int(x.split('.')[0]))
['1.i.jpg',
 '2.i.jpg',
 '10.i.jpg',
 '11.i.jpg',
 '102.i.jpg',
 '103.i.jpg',
 '104.i.jpg',
 '105.i.jpg',
 '106.i.jpg',
 '107.i.jpg',
 '108.i.jpg',
 '109.i.jpg']

这是替代方案。它并不像克里斯所建议的那样简单。

files = ['1.i.jpg',
'10.i.jpg',
'102.i.jpg',
'103.i.jpg',
'104.i.jpg',
'105.i.jpg',
'106.i.jpg',
'107.i.jpg',
'108.i.jpg',
'109.i.jpg',
'11.i.jpg',
'2.i.jpg']
numbers = []
for file in files:
    x = file.split('.')[0]
    numbers.append(x)
files.clear()
for i in sorted(numbers, key=int):
    y = i + ".i.jpg"
    files.append(y)
print(files)

打印:

['1.i.jpg', '2.i.jpg', '10.i.jpg', '11.i.jpg', '102.i.jpg', '103.i.jpg', '104.i.jpg', '105.i.jpg', '106.i.jpg', '107.i.jpg', '108.i.jpg', '109.i.jpg']

最新更新