2013-10-29 60 views
1

我有文件的列表:訂購了glob.glob在python

foo_00.txt 
foo_01.txt 
foo_02.txt 
foo_03.txt 
foo_04.txt 
foo_05.txt 
foo_06.txt 
foo_07.txt 
foo_08.txt 
foo_09.txt 
foo_10.txt 
foo_11.txt 
......... 
......... 
foo_100.txt 
foo_101.txt 

當我使用

import glob 
PATH = "C:\testfoo" 
listing = glob.glob(os.path.join(PATH, '*.txt')) 

我有這個順序

foo_00.txt 
    foo_01.txt 
    foo_02.txt 
    foo_03.txt 
    foo_04.txt 
    foo_05.txt 
    foo_06.txt 
    foo_07.txt 
    foo_08.txt 
    foo_09.txt 
    foo_100.txt 
    foo_101.txt 
    ......... 
    ......... 
    foo_10.txt 
    foo_11.txt 
    ......... 

我也嘗試sorted(glob.glob(os.path.join(PATH, '*.txt')))但沒有解決我的問題,因爲我希望有正確的順序。在foo_09.txt之後,我希望導入foo_10.txt而不是foo_100.txt等等。

+0

而你的問題是......? –

+0

對不起,如果我不清楚。我希望有正確的順序。 foo_09.txt後我想導入foo_10.txt而不是foo_100.txt –

+0

你想要一個自然的數字排序;這裏有幾個問題已經涵蓋了這一點。 –

回答

8

您可以使用特殊的key函數進行排序。

sorted(files, key=lambda name: int(name[4:-4])) 

這是做什麼的,它需要文件名,例如, foo_100.txt,刪除前4個字符和後4個字符,將其餘字符轉換爲int,然後按這些值排序。

當然,這隻適用於所有文件具有相同的前綴和擴展名的情況,並且您可能必須爲其他文件名使用不同的數字。或者,可以使用字符串的split方法或正則表達式來提取鍵函數中的數字部分。