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

时间:2019-02-14 00:48:33

标签: python

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

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
...
...
...

如何在2.i.jpg之后出现1.i.jpg,依此类推?那就是说,按数字顺序的顺序正确吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用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']

答案 1 :(得分:2)

这是另一种选择。它并不像克里斯建议的那样简单。

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']