Python实现按行筛选忽略扩展名的唯一文件名问题求助
需求与问题
读取带扩展名文件名列表的文本文件,按行独立处理,筛选出忽略扩展名后名称唯一的原文件名。
输入示例
foo.mp3|bar.txt|baz.mp3 wub.mp3|wub.mp3|wub.mp3|wub.txt|wub.png quux.mp3|quux.txt|thud.mp3
预期输出
foo.mp3|bar.txt|baz.mp3 thud.mp3
规则说明
- 文件名仅含字母数字与单个句点,无路径,分隔符为竖线
- 每行独立处理,文件最多500行,每行最多100字符
原代码问题分析
原代码错误地将去重后的文件名前缀直接拼接,完全偏离需求。实际需要保留原文件名,且仅保留那些前缀(去扩展名后)在当前行中只出现一次的文件。
修正后的代码
def find_unique_filenames(text): result = [] for line in text.split('\n'): line = line.strip() if not line: result.append('') continue filenames = line.split('|') # 统计每个前缀的出现次数 prefix_count = {} for fn in filenames: prefix = fn.split('.')[0] prefix_count[prefix] = prefix_count.get(prefix, 0) + 1 # 筛选前缀仅出现一次的原文件名,同时去重并保持原顺序 filtered = list(dict.fromkeys([fn for fn in filenames if prefix_count[fn.split('.')[0]] == 1])) result.append('|'.join(filtered)) return '\n'.join(result) # 测试验证 print(find_unique_filenames("foo.mp3|bar.txt|baz.mp3\nwub.mp3|wub.mp3|wub.mp3|wub.txt|wub.png\nquux.mp3|quux.txt|thud.mp3"))
代码逻辑说明
- 逐行处理输入文本,先处理空行避免报错
- 统计当前行中每个文件名前缀的出现次数
- 筛选出前缀仅出现一次的原文件名,用
dict.fromkeys去重并保留原顺序 - 将筛选结果拼接为竖线分隔的字符串,加入结果列表
内容的提问来源于stack exchange,提问作者bills kean
相关产品推荐
相关产品推荐

