我有一个路径列表,如下所示(见下文(。正如您所看到的,文件命名是不一致的,但我希望每个人只保留一个文件。我已经有一个函数可以删除重复的文件,如果它们具有完全相同的文件名但不同的文件扩展名,然而,对于这种不一致的文件命名情况,这似乎更棘手。
文件列表看起来像这样(但假设有数千条路径和单词不是全名的一部分,例如简历、简历等(:
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']
考虑到名字在大多数时候都是书面的(例如,名字在姓氏之前(,我认为如果名字重复,就必须有一种方法来获得一组唯一的路径?
如果您想保持算法相对简单(即不使用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)