【问题标题】:How to get the latest folder in a directory using Python如何使用 Python 获取目录中的最新文件夹
【发布时间】:2020-01-13 13:34:42
【问题描述】:

我需要检索最近创建的文件夹的目录。我正在使用一个程序,每次执行时都会输出一个新的 run## 文件夹(即 run01、run02、run03 等)。在任何一个run## 文件夹中都有一个我要分析的数据文件(file-i-want.txt)。

folder_numb = 'run01'
dir = os.path.dirname(__file__)
filepath = os.path.join(dir, '..\data\directory',run_numb,'file-i-want.txt')

简而言之,我不想在run## 中进行硬编码,只需获取最近创建的run## 文件夹中的文件目录即可。

【问题讨论】:

    标签: python filepath python-os


    【解决方案1】:

    您可以通过os.stat获取创建日期

    path = '/a/b/c'
    
    #newest
    
    newest = max([f for f in os.listdir(path)], key=lambda x: os.stat(os.path.join(path,x)).st_birthtime)
    
    # all files sorted
    
    sorted_files = sorted([f for f in os.listdir(path)],key=lambda x: os.stat(os.path.join(path, x)).st_birthtime, reverse=True)
    

    【讨论】:

      【解决方案2】:

      pathlib 是推荐给os 的文件系统相关任务。

      reference

      你可以试试:

      filepath = Path(__file__).parent / 'data/directory'
      fnames = sorted(list(Path(filepath).rglob('file-i-want.txt')), key=lambda x: Path.stat(x).st_mtime, reverse=True)
      filepath = str(fnames[0])
      filepath
      

      【讨论】:

        【解决方案3】:

        glob.glob('run*') 将返回与按名称排序的模式匹配的文件/目录列表。

        因此,如果您想要最新的运行,您的代码将是:

        import glob
        print(glob.glob('run*')[-1])  # raises index error if there are no runs
        

        重要的是,文件按名称排序,例如,在这种情况下,“run21”将出现在“run100”之后,因此您需要使用足够多的位数才能看不到此错误。或者只计算匹配文件的数量,然后用这个数字重新创建文件夹的名称。

        您可以使用 glob 来检查具有相同名称模式的文件的数量:

        import glob
        n = len(glob.glob('run*')) # number of files which name starts with 'run'
        new_run_name = 'run' + str(n)
        

        注意:使用此代码文件名从 0 开始,如果您想从 1 开始,只需将 1 添加到 n。

        如果您希望始终使用两位数的运行编号 (00, 01, 02) 而不是“str(n)”,请使用“str(n).zfill(2)”

        示例:

        import glob
        n = len(glob.glob('run*')) # number of files which name starts with 'run'
        new_run_name = 'run' + str(n + 1).zfill(2)
        

        【讨论】:

          猜你喜欢
          • 2015-03-22
          • 2017-12-02
          • 1970-01-01
          • 1970-01-01
          • 2012-06-14
          • 1970-01-01
          • 2017-01-12
          • 1970-01-01
          相关资源
          最近更新 更多