我有一个看起来像这样的路径列表(见下文)。如您所见,文件命名不一致,但我想每个人只保留一个文件。如果文件名完全相同但文件扩展名不同,我已经有了一个删除重复项的功能,但是,这种不一致的文件命名情况似乎更棘手。
文件列表看起来像这样(但假设有数千个路径和单词不是全名的一部分,例如简历、简历等):
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']
鉴于大多数时间名称都有些书面模式(例如名字在姓氏之前),我认为如果名称重复,我认为必须有一种方法来获得一组唯一的路径?>
答案 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)