如何使用 Python 获取目录中的最新文件夹

How to get the latest folder in a directory using Python

我需要检索最近创建的文件夹的目录。我使用的程序每次执行时都会输出一个新的 运行## 文件夹(即 运行01、运行02、运行03 等等)。在任何一个 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## 文件夹中的文件目录。

您可以通过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)

glob.glob('run*') 将 return 匹配按名称排序的模式的 files/directories 列表。

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

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)
对于文件系统相关任务,

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