如何删除包含相同名称的路径?

时间:2021-03-25 12:10:44

标签: python list path duplicates set

我有一个看起来像这样的路径列表(见下文)。如您所见,文件命名不一致,但我想每个人只保留一个文件。如果文件名完全相同但文件扩展名不同,我已经有了一个删除重复项的功能,但是,这种不一致的文件命名情况似乎更棘手。

文件列表看起来像这样(但假设有数千个路径和单词不是全名的一部分,例如简历、简历等):

all_files = 
['cv_bob_johnson.pdf',
'bob_johnson_cv.pdf',
'curriculum_vitae_bob_johnson.pdf',
'cv_lara_kroft_cv.pdf',
'cv_lara_kroft.pdf' ]

所需的输出:

unique_files = ['cv_bob_johnson.pdf', 'cv_lara_kroft.pdf']

鉴于大多数时间名称都有些书面模式(例如名字在姓氏之前),我认为如果名称重复,我认为必须有一种方法来获得一组唯一的路径?

1 个答案:

答案 0 :(得分:1)

如果您想让算法保持相对简单(即不使用 ML 等),您需要对要删除的典型子字符串有所了解。让我们列出这样的子串,例如:

remove = ['cv_', '_cv', 'curriculum_vitae_', '_curriculum_vitae']

然后你可以这样处理你的文件列表:

import re
all_files = ['cv_bob_johnson.pdf', 'bob_johnson_cv.pdf', 'curriculum_vitae_bob_johnson.pdf', 'cv_lara_kroft_cv.pdf', 'cv_lara_kroft.pdf']
remove = ['cv_', '_cv', 'curriculum_vitae_', '_curriculum_vitae']

unique = []
for file in all_files:
    # strip a suffix, if any:
    try:
        name, suffix = file.rsplit('.', 1)
    except:
        name, suffix = file, None
    # remove the excess parts:
    for rem in remove:
        name = re.sub(rem, '', name)
    # append the result to the list:
    unique.append(f'{name}.{suffix}' if suffix else name)

# remove duplicates:
unique = list(set(unique))
print(unique)