2017-04-03 53 views
0

我有很多的文件目錄下的用戶主目錄(/家/ sebas /)最新文件:的Python:根據上名字

abc_11.txt 
abc_22.txt 
xyz_01_11.txt 
xyz_01_22.txt 
hello_01.py 
hello_02.py 

我試圖根據名稱來獲取最新的文件。所以上面目錄的輸出應該是abc_22.txt和xyz_01_22.txt和hello_02.py。這是我寫的。

def sorted_get_latest_file(path, *paths): 
    fullpath = os.path.join(path, *paths) 
    list_of_files = glob.glob(fullpath)      
    for i in list_of_files: 
     print os.path.split(i)[-1] 
     j = sorted(os.path.split(i)[-1], key=lambda x: x.split('_')[-1]) 
     print j 

這就是我得到:

abc_11.txt 
['_', '.', '1', '1', 'a', 'b', 'c', 't', 't', 'x'] 
abc_22.txt 
['_', '.', '2', '2', 'a', 'b', 'c', 't', 't', 'x'] 
pr.txt 
['.', 'p', 'r', 't', 't', 'x'] 
xyz_11.txt 
['_', '.', '1', '1', 't', 't', 'x', 'x', 'y', 'z'] 
xyz_22.txt 
['_', '.', '2', '2', 't', 't', 'x', 'x', 'y', 'z'] 
+0

是'xyz_02_11'比'xyz_01_22'更新?或者只是最後2位數字的「更新」? – MooingRawr

+0

找到最新文件的邏輯是什麼?現在,你在字符串中排序字符,而不是列表中的字符串。 –

+0

你正在排序每個文件本身,這意味着排序字符串...也許你的意思是:'排序([os.path.split(i)[ - 1]爲我in list_of_files],鍵= lambda x:x。 split('_')[ - 1])' – AChampion

回答

0

要排序一個文件名,而不是文件名列表:

>>> list_of_files = glob.glob(fullpath) 
>>> sorted([os.path.split(i)[-1] for i in list_of_files], key=lambda x: x.split('_')[-1]) 
['hello_01.py', 'hello_02.py', 'abc_11.txt', 
'xyz_01_11.txt', 'abc_22.txt', 'xyz_01_22.txt'] 
+0

a = <文件列表>。在這種情況下,我可以這樣做:'j = sorted(a,key = lambda x:x.split('_')[ - 1]) print j' – cloudvar

+0

是的,如果您需要,只需添加'reverse = True'。然後,你可以切掉頂部... – AChampion

+0

其關閉,讓我搜索更多。從上面輸出:'['pr.txt','abc_22.txt','xyz_22.txt','abc_11.txt','xyz_11.txt']'我只希望它只打印'abc_22.txt,xyz_22。 txt和pr.txt' – cloudvar