首页 > 解决方案 > 在具有不同文件名的目录中查找并分隔最大元素

问题描述

我正在尝试查找目录中的最大元素,但该目录上有不同的文件名,如果我制作一个列表并使用max()函数,我只会得到一个结果(显然是最大的一个),但是我怎样才能分开使用 max 之前的文件,以便我可以单独获取最大元素,或者有一种方法或函数可以做到这一点?谢谢。

example_directory_list = ['CM_30_00.v01', 'CM_30_00.v02', 'CM_30_00.v03', 'CM_30_00_house.v01','CM_30_00_house.v02', 'CM_30_00_house.v03', 'CM_30_01.v01', 'CM_30_00', 'CM_30_01']

print max (example_directory_list )

result ['CM_30_00.v03','CM_30_00_house.v03', 'CM_30_01.v01']

标签: pythonarrayslistsortingmax

解决方案


你的问题有点不清楚。似乎文件扩展名是一个版本号,您想为每个不同的文件获取最高版本的文件名。

在下面的代码中,我忽略了没有扩展名的文件。

它绝不是健壮的。我什至不费心将版本号提取为int. 它将文件扩展名比较为str.

它的工作原理是遍历所有文件名,分离文件名和扩展名,将扩展名与迄今为止看到的最高版本(或“v00”,如果它还没有遇到相同的文件名)进行比较,并在dict必要时更新。最后,它重构最高的文件名并将它们存储在results list.

example_directory_list = ['CM_30_00.v01', 
                          'CM_30_00.v02', 
                          'CM_30_00.v03', 
                          'CM_30_00_house.v01', 
                          'CM_30_00_house.v02', 
                          'CM_30_00_house.v03', 
                          'CM_30_01.v01', 
                          'CM_30_00', 
                          'CM_30_01', ]

files = {}

for filename in example_directory_list:
    dot_index = filename.rfind(".")
    if dot_index == -1:
        continue
    name_without_extension = filename[:dot_index]
    extension = filename[dot_index+1:]
    
    highest_version = files.get(name_without_extension, "v00")
    if extension > highest_version:
        files[name_without_extension] = extension

results = [f"{filename}.{extension}" for filename, extension in files.items()]

print(results)

输出:

['CM_30_00.v03', 'CM_30_00_house.v03', 'CM_30_01.v01']

推荐阅读