我有以下代码部分,我打算通过这些代码以正确的顺序打印文件名:
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
,依此类推?那就是说,按数字顺序的顺序正确吗?
谢谢。
答案 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']