2010-12-21 40 views
9

如何基於時間戳列出目錄中的文件?基於時間的目錄列表

os.listdir() 

以任意順序列出。

是否有一個內置函數可以根據時間戳列出?或以任何順序?

+1

也許您可以解釋一下http://stackoverflow.com/q/168409/505893 – bluish 2010-12-21 15:03:58

回答

37

您可以在每個文件上調用stat()並按照其中一個時間戳進行排序,可能是使用返回文件時間戳的鍵函數。

import os 

def sorted_ls(path): 
    mtime = lambda f: os.stat(os.path.join(path, f)).st_mtime 
    return list(sorted(os.listdir(path), key=mtime)) 

print(sorted_ls('documents')) 
+0

的重複,因爲我不知道使用lambda函數? – vkris 2010-12-21 15:26:27

+2

當然,lambda是基本未命名的函數。它們可能在冒號前面有參數(在這種情況下有一個:f,一個文件名)。 lambda的主體是一個表達式,其結果被用作lambda的返回值。 `sorted`函數需要一個可迭代(比如一個列表)並返回一個迭代器,而不是產生給定iterable的排序版本。爲`key`關鍵字參數提供一個函數,可以讓您按給定迭代中項目的自然順序以外的順序進行排序。在每個文件名上調用`mtime`函數並用於對列表進行排序。 – HarryM 2010-12-21 15:54:40

0

我的直接的解決辦法是,

>>> import commands 
>>> a = commands.getstatusoutput("ls -ltr | awk '{print $9}'") 
>>> list =a[1].split('\n') 

按照由藍色指出重複的帖子,這是一個壞的解決方案;爲什麼它不好?