2012-10-29 27 views
8

我使用目錄中的文件填充tkinter列表框。文件的名稱都以從01 - n開始的數字開頭。當我查看目錄中的文件時,它們按數字順序顯示。但是,當我將這些文件加載​​到列表框中時,它們不是以數字順序排列的。我可以改變前面的數字,但相同的文件將始終出現在同一個地方。目錄中的文件被錯誤的順序與python

我只是使用簡化的項目名稱來簡化這個例子。它仍然表明它們不是按字母順序或數字排序的。

列表應出現在我的列表框下面

01. itemA 
02. itemB 
03. itemC 
04. itemD 

但它顯示爲:

01. itemA 
04. itemD 
02. itemB 
03. itemC 

我可以改變周圍的領先數字,但該文件將總是在相同的填充順序(按名稱,而不是數字)。奇怪的是,它甚至不是字母順序。

我用這個

i = 0 
for filename in os.listdir(directory): 
     fileList.insert(i, filename) 
     i = i + 1 

for filename in os.listdir(directory): 
     fileList.insert(END, filename) 

兩個結果是一樣的。

+0

該文檔稱[ 「這份名單是在任意順序。」(http://docs.python.org/2/library/os.html#os.listdir)!也許是修改日期?你研究過其他可能性嗎? –

+1

你可以嘗試'在排序(os.listdir(目錄))的文件名:'http://docs.python.org/2/library/functions.html#sorted – FabienAndre

+0

@FabienAndre完美的工作,謝謝 – user1104854

回答

17

os.listdir不保證任何目錄內容的排序。如果要將物品分類,只需使用內置sorted功能(必要時使用適當的key功能)對其進行分類。

+1

事實上,文檔支持你:[「列表以任意順序。」](http://docs.python.org/2/library/os.html#os.listdir)(!) –

+0

@hayden - 是的。可能有一些瘋狂的方法,但它可能依賴於文件系統,因此文檔更容易說「任意」。感謝張貼鏈接通過:) – mgilson

+0

謝謝,完美的工作。你有什麼理由要以任意的順序?我只能想到更多的情況,當你想要它分類不是。 – user1104854

9

試試這個。

for index, filename in enumerate(sorted(os.listdir(directory))): 
     print '{0:02d}. {1}'.format(index + 1, filename) 

如果數字是文件名的一部分,請使用@ FabienAndre的評論。

for filename in sorted(os.listdir(directory)): 
     print filename 
+1

這將是'str(index + 1).zfill(2)+'。 '+文件名' - 但(從它的樣子,01.是文件名的一部分...) – mgilson

+0

@mgilson,修正了格式化,但我不認爲它是文件名的一部分,因爲他有我第一個代碼片段中的變量。 – John

+0

當你使用'.format'時,你也可以在裏面放入''''和'filename'。 '「{0:02D}。 {1}'.format(index + 1,filename)' – mgilson

相關問題