【问题标题】:Finding most recently edited file in python在python中查找最近编辑的文件
【发布时间】:2011-02-13 10:22:59
【问题描述】:

我有一组文件夹,我希望能够运行一个函数来查找最近编辑的文件并告诉我文件的名称和它所在的文件夹。

文件夹布局:

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

任何提示让我开始,因为我遇到了一些障碍。

【问题讨论】:

    标签: python file path directory


    【解决方案1】:

    您应该查看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
    

    【讨论】:

    • os.path.getmtime()os.stat(full_path).st_mtime 的便捷简写
    • 从主目录运行它时出现错误:OSError: [Errno 2] No such file or directory: './.config/chromium/SingletonLock'
    • @armandino:我猜问题是有一个锁文件正在被创建,然后很快被删除。如果它在os.walk 返回其文件名之后被删除,但在调用os.stat 之前,那么您会看到这样的错误。如果您确实需要在以这种方式删除文件的目录上运行这样的脚本,我建议将对 os.stat 的调用包装在 try/except 块中。
    • Eli,如何在每个子文件夹中找到最后修改的文件并打印出来?
    【解决方案2】:

    它有助于包装内置的目录遍历功能,该功能仅产生文件的完整路径。然后你可以只取返回所有文件的函数并挑选出修改时间最长的那个:

    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)
    

    【讨论】:

    • 不错的提示 - 这帮助我完成了我正在从事的一个小项目。
    【解决方案3】:
    • 使用os.walk 列出文件
    • 使用os.stat获取文件修改时间戳(st_mtime)
    • 将时间戳和文件名放在一个列表中并按时间戳排序,最大的时间戳是最近编辑的文件。

    【讨论】:

      【解决方案4】:

      如果有人正在寻找一种单一的方式来做到这一点:

      latest_edited_file = max([f for f in os.scandir("path\\to\\search")], key=lambda x: x.stat().st_mtime).name
      

      【讨论】:

      • 欢迎来到 Stack Overflow。虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 How to Answer
      【解决方案5】:

      你可以使用

      os.walk
      

      见:http://docs.python.org/library/os.html

      【讨论】:

        【解决方案6】:

        使用os.path.walk()遍历目录树,os.stat().st_mtime获取文件的mtime。

        您传递给os.path.walk() 的函数(visit 参数)只需要跟踪它看到的最大 mtime 以及它看到它的位置。

        【讨论】:

          【解决方案7】:

          我正在使用path = r"C:\Users\traveler\Desktop"

          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)
          

          我错过了什么?

          【讨论】:

            【解决方案8】:

            对于多个文件,如果有人来这里:

            import glob, os
            
            files = glob.glob("/target/directory/path/*/*.mp4")
            files.sort(key=os.path.getmtime)
            
            for file in files:
               print(file)
            

            这将打印/path/ 中任何文件夹中具有.mp4 扩展名的所有文件,最近修改的文件路径位于底部。

            【讨论】:

              猜你喜欢
              • 2022-11-24
              • 1970-01-01
              • 2021-07-28
              • 2011-02-03
              • 1970-01-01
              • 2014-05-20
              • 1970-01-01
              • 1970-01-01
              • 2014-07-19
              相关资源
              最近更新 更多