2010-04-28 59 views
6

我有一組文件夾,我希望能夠運行一個函數來查找最近編輯過的文件,並告訴我文件的名稱及其所在的文件夾。在python中查找最近編輯過的文件

文件夾佈局:

root 
    Folder A 
     File A 
     File B 
    Folder B 
     File C 
     File D 
etc... 

任何提示,讓我開始,我已經打了一下牆上的。

回答

2

您可以使用

os.walk 

參見:http://docs.python.org/library/os.html

+1

雖然這種聯繫可以回答這個問題,最好是在這裏有答案的關鍵部位和提供鏈接供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [發表評論](/ review/low-quality-posts/18075324) – Deep 2017-11-27 13:16:45

13

你應該看看os.walk功能,以及os.stat,它可以讓你做這樣的事情:

import os 

max_mtime = 0 
for dirname,subdirs,files in os.walk("."): 
    for fname in files: 
     full_path = os.path.join(dirname, fname) 
     mtime = os.stat(full_path).st_mtime 
     if mtime > max_mtime: 
      max_mtime = mtime 
      max_dir = dirname 
      max_file = fname 

print max_dir, max_file 
+2

'os.path.getmtime()'是'os.stat(full_path).st_mtime'方便的簡寫形式 – 2010-04-28 16:45:04

+1

我運行時遇到錯誤它從我的主目錄: OSError:[Errno 2]沒有這樣的文件或目錄:'./.config/chromium/SingletonLock' – armandino 2010-04-28 18:22:37

+1

@armandino:我猜問題是,有一個鎖文件是創建並非常迅速地刪除。如果它在'os.walk'返回它的文件名後,但在調用'os.stat'之前被刪除了,那麼你會期望看到這樣的錯誤。如果你真的需要在這樣的文件被刪除的目錄上運行這樣的腳本,我建議在try/except塊中將調用包裝到'os.stat'中。 – 2010-04-28 18:49:37

3
  • 使用os.walk來列出文件
  • 使用os.stat獲取文件修改時間戳(st_mtime)
  • 將時間戳和文件名放在列表中,並按時間戳排序,最大時間戳是最近編輯的文件。
1

使用os.path.walk()遍歷目錄樹和os.stat().st_mtime以獲取文件的mtime。

您傳遞給os.path.walk()visit參數)的函數只需要跟蹤它看到的最大mtime以及它看到它的位置。

+0

'os.path.walk'已被棄用 – SilentGhost 2010-04-28 15:55:43

5

它有助於將內置目錄打包到只產生完整文件路徑的函數中。然後,你可以採取返回文件的功能,並挑選出具有最高修改時間的一個:

import os 

def all_files_under(path): 
    """Iterates through all files that are under the given path.""" 
    for cur_path, dirnames, filenames in os.walk(path): 
     for filename in filenames: 
      yield os.path.join(cur_path, filename) 

latest_file = max(all_files_under('root'), key=os.path.getmtime) 
+0

不錯的提示 - 這幫了我一個小工程,我正在努力。 – 2013-05-20 12:14:22