2010-04-28 69 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