全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何用 Python 精确提取每行中“扩展名去除后唯一出现”的文件名

本文讲解如何正确处理按行分割的管道分隔文件列表,对每行独立去扩展名后统计原始文件名出现频次,仅保留频次为 1 的原始完整文件名(含扩展名),并用管道符重新拼接输出。

要解决该问题,关键在于理解题意中的“unique per row, ignoring the file extensions”——它不是指去重(distinct),而是指:在去除扩展名后,若某个基础名(如 wub、quux)在整个当前行中只出现一次,则保留其原始带扩展名的完整形式;若出现两次及以上,则整行中所有该基础名的文件均被剔除

原代码错误地使用了 set,导致只记录了去重后的基础名,完全丢失了频次信息和原始文件名映射关系。正确做法是:

  1. 按行处理;
  2. 将每行按 | 分割为文件名列表;
  3. 对每个文件名提取基础名(filename.split('.')[0]);
  4. 使用 collections.Counter 统计每行中各基础名的出现次数;
  5. 遍历原始文件名列表,仅保留那些对应基础名计数为 1 的完整文件名;
  6. 将筛选后的文件名用 | 拼接成新行。

以下是修正后的完整 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('|')
        # 提取每文件的基础名(不含扩展名)
        basenames = [f.split('.')[0] for f in filenames]
        # 统计基础名频次
        basename_counts = Counter(basenames)
        # 仅保留基础名出现恰好 1 次的原始文件名
        unique_files = [
            fname for fname in filenames
            if basename_counts[fname.split('.')[0]] == 1
        ]
        result.append('|'.join(unique_files))
    return '\n'.join(result)

# 测试示例
test_input = """foo.mp3|bar.txt|baz.mp3
wub.mp3|wub.mp3|wub.mp3|wub.txt|wub.png
quux.mp3|quux.txt|thud.mp3"""

print(find_unique_filenames(test_input))

✅ 输出结果:

foo.mp3|bar.txt|baz.mp3
thud.mp3

注意事项:

  • 文件名严格为“纯字母数字 + 单个点 + 扩展名”,因此 split('.')[0] 安全可靠,无需正则;
  • 每行独立处理,无状态依赖,适合流式读取大文件(可改用 for line in open(...) 迭代);
  • 若某行所有基础名都重复(如第二行全为 wub),则输出为空行(符合题目逻辑);
  • 保持原始顺序:我们遍历 filenames 列表而非 Counter 的键,确保输出顺序与输入一致。

该方案时间复杂度为 O(n),空间复杂度为 O(m)(m 为单行文件数),完全满足题目约束(≤500 行,≤100 字符/行)。


# python  # app 


相关文章: 如何选择适配移动端的WAP自助建站平台?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  大连 网站制作,大连天途有线官网?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  如何高效完成独享虚拟主机建站?  建站主机如何安装配置?新手必看操作指南  如何在阿里云部署织梦网站?  建站主机类型有哪些?如何正确选型  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何通过西部建站助手安装IIS服务器?  C#怎么创建控制台应用 C# Console App项目创建方法  如何在阿里云完成域名注册与建站?  如何通过可视化优化提升建站效果?  宝塔面板如何快速创建新站点?  如何基于云服务器快速搭建个人网站?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何在阿里云通过域名搭建网站?  如何快速选择适合个人网站的云服务器配置?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站之星各版本价格是多少?  如何快速生成橙子建站落地页链接?  如何选购建站域名与空间?自助平台全解析  如何通过远程VPS快速搭建个人网站?  黑客入侵网站服务器的常见手法有哪些?  建站主机与服务器功能差异如何区分?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何高效配置IIS服务器搭建网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何通过虚拟机搭建网站?详细步骤解析  微信小程序 input输入框控件详解及实例(多种示例)  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  大型企业网站制作流程,做网站需要注册公司吗?  ,怎么在广州志愿者网站注册?  如何快速搭建个人网站并优化SEO?  网站制作公司排行榜,四大门户网站排名?  如何获取开源自助建站系统免费下载链接?  ,交易猫的商品怎么发布到网站上去?  建站之星如何保障用户数据免受黑客入侵?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  如何选择CMS系统实现快速建站与SEO优化?  建站主机是什么?如何选择适合的建站主机?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何用PHP快速搭建CMS系统?  如何在阿里云虚拟主机上快速搭建个人网站?  建站10G流量真的够用吗?如何应对访问高峰?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。