本文详解如何正确处理多行管道分隔的文件名,逐行统计去除扩展名后的出现频次,仅保留出现恰好一次的原始文件名(含扩展名),并以相同格式输出。
在该挑战中,核心逻辑并非简单去重(set 去重会丢失频次信息),而是识别每行中“基础名(不含扩展名)出现次数为 1”的原始文件名。例如 wub.mp3|wub.txt|wub.png 去掉扩展名后均为 wub,出现 3 次 → 全部排除;而 quux.mp3|quux.txt|thud.mp3 中 quux 出现 2 次(排除两者),thud 出现 1 次(保留 thud.mp3)。
正确解法需两步:
以下是健壮、可读性强的 Python 实现:
from collections import Counter
def find_unique_filenames(text):
result = []
for line in text.strip().split('
\n'):
if not line.strip(): # 跳过空行
continue
filenames = line.strip().split('|')
# 提取所有基础名(不含扩展名)
stems = [f.split('.')[0] for f in filenames]
# 统计频次
stem_count = Counter(stems)
# 筛选:仅保留 stem 出现次数为 1 的原始 filename(保持原始顺序)
unique_files = [f for f in filenames if stem_count[f.split('.')[0]] == 1]
result.append('|'.join(unique_files))
return '\n'.join(result)
# 测试验证
test_input = "foo.mp3|bar.txt|baz.mp3\nwub.mp3|wub.mp3|wub.mp3|wub.txt|wub.png\nquux.mp3|quux.txt|thud.mp3"
print(find_unique_filenames(test_input))输出:
foo.mp3|bar.txt|baz.mp3 thud.mp3
✅ 关键点说明:
⚠️ 注意事项:
掌握频次统计与条件筛选的组合,是处理此类“基于重复性过滤”问题的核心能力。