2017-10-04 39 views
2

我有一個包含10個子文件夾符合以下命名文件夾:如何按字母數字順序設置列表?

Folder1中,文件夾2,Folder3,... 我想然而,由爲了操縱他們,當我申請

lst = os.listdir(dirname) 
lst.sort() 

輸出以下內容:

Folder1 
Folder10 
Folder2 
Folder3 
Folder4 
Folder5 
Folder6 
Folder7 
Folder8 
Folder9 

預計,到了適當的排序,我做了以下內容:

lst = os.listdir(dirname) 
lst.sort() 

projects = {} 

for p in lst: 
    pInt = re.sub(r"Folder", " ", p) 
    projects[pInt] = p 
    print(p) 

print projects 

得到以下結果:

{' 10': 'Folder10', ' 2': 'Folder2', ' 3': 'Folder3', ' 1': 'Folder1', ' 6': 'Folder6', ' 7': 'Folder7', ' 4': 'Folder4', ' 5': 'Folder5', ' 8': 'Folder8', ' 9': 'Folder9'} 

如何從那裏繼續列出他們正確,所以我的系統會訪問他們一個1按順序

+0

你需要一本詞典嗎? 'lst.sort()'應該以字母數字順序離開列表,這已經是您想要的,不需要創建該字典。 –

+0

@PacoH。字典順序不適用於'2'和'10'。 –

+0

KIndly檢查文件夾10是在排名後的文件夾1後,但它應該是最後文件夾9 – Alex

回答

2

你可以使用sorted與自定義鍵。默認的是字典順序,它不適合你的目的。

>>> data 
['Folder1', 'Folder10', 'Folder2', 'Folder3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9'] 
>>> sorted(data) 
['Folder1', 'Folder10', 'Folder2', 'Folder3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9'] 
>>> sorted(data, key= lambda s: int(s.replace('Folder', ''))) 
['Folder1', 'Folder2', 'Folder3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9', 'Folder10'] 

如果不是每一個文件夾名爲FolderX,您可以使用此鍵:

>>> sorted(data, key= lambda s: int(''.join(filter(str.isdigit, s)))) 
['Folder1', 'Folder2', 'Data3', 'Folder4', 'Folder5', 'Folder6', 'Folder7', 'Folder8', 'Folder9', 'Folder10'] 

另一種方法是重命名folderXfolder0X。然後在Folder10之前對Folder02進行排序。