我目前正在处理多个子目录中的文件列表。我已经设法做到了这一点,但问题是,我有多个文件存储在多个子目录具有相同的文件名。所以,我必须对这些文件进行分组,只获取最后修改过的文件。
files = ["Z:\RM Submissions\01_RM Submission_Archive\sample_file.csv","Z:\RM Submissions\Final Submissions\sample_file.csv","Z:\RM Submissions\01_RM Submission_Archive\sample_file1.csv"]
例如,根据我上面的示例数据,sample_file.csv
位于两个不同的子目录中,但我只想获得最新的一个。
下面的代码应该适用于同一目录下具有相同文件名的文件。但是不工作,因为我有文件存储在多个子目录。
for k, g in itertools.groupby(os.path.basename(files), lambda f: os.path.splitext(f)[0]):
dups = list(g)
if len(dups) > 1:
#get the last modified ones
那么我怎样才能按文件名分组,只找到最新的文件呢?
您可以使用字典对文件进行分组,将基本名称作为键,并将相应的文件收集在列表中:
import os
files_dct = {}
for file in files:
files_dct.setdefault(os.path.basename(file), []).append(file)
for basename, filegroup in files_dct.items():
if len(filegroup) > 1:
file = max(filegroup, key=lambda f: os.stat(f).st_mtime_ns)
else:
file = filegroup[0]