You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"))

代码逻辑说明

  1. 逐行处理输入文本,先处理空行避免报错
  2. 统计当前行中每个文件名前缀的出现次数
  3. 筛选出前缀仅出现一次的原文件名,用dict.fromkeys去重并保留原顺序
  4. 将筛选结果拼接为竖线分隔的字符串,加入结果列表

内容的提问来源于stack exchange,提问作者bills kean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:14:55