如何用 Python 精确提取每行中“去扩展名后唯一”的文件名
发布时间 - 2025-12-30 00:00:00 点击率:次本文详解如何正确处理多行管道分隔的文件名,逐行统计去除扩展名后的出现频次,仅保留出现恰好一次的原始文件名(含扩展名),并以相同格式输出。
在该挑战中,核心逻辑并非简单去重(set 去重会丢失频次信息),而是识别每行中“基础名(不含扩展名)出现次数为 1”的原始文件名。例如 wub.mp3|wub.txt|wub.png 去掉扩展名后均为 wub,出现 3 次 → 全部排除;而 quux.mp3|quux.txt|thud.mp3 中 quux 出现 2 次(排除两者),thud 出现 1 次(保留 thud.mp3)。
正确解法需两步:
- 按行分割,再按 | 拆分每行的文件名;
- 对每行内所有文件名执行:
✅
提取基础名(filename.split('.')[0]);
✅ 统计各基础名的出现频次(推荐使用 collections.Counter);
✅ 筛选出频次为 1 的原始文件名;
✅ 按原顺序(非去重顺序!)拼接结果(注意:题目未要求保持输入顺序?但示例输出隐含保留原始位置顺序,故应遍历原列表筛选,而非依赖 Counter.keys())。
以下是健壮、可读性强的 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
✅ 关键点说明:
- 使用 Counter(stems) 高效统计频次,避免手动字典计数;
- 筛选时遍历原始 filenames 列表,确保输出顺序与输入一致(如 foo.mp3|bar.txt|baz.mp3 三者基础名均唯一,全部保留且顺序不变);
- 不依赖 set 或 dict.keys(),避免无序或丢失重复项判断逻辑;
- 显式处理空行,增强鲁棒性;
- 每行独立处理,完全符合题目“no logic carries forward”要求。
⚠️ 注意事项:
- 文件名严格为“纯字母数字 + 单个点 + 扩展名”,因此 split('.')[0] 安全可靠(无需正则或 os.path.splitext);
- 若某行无任何唯一文件名(如全为 a.txt|a.log|b.json|b.xml),对应输出为空字符串(即该行留空),符合逻辑;
- 行长度 ≤100 字符、总行数 ≤500,本实现时间复杂度为 O(N×M),完全满足性能要求。
掌握频次统计与条件筛选的组合,是处理此类“基于重复性过滤”问题的核心能力。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel如何处理异常和错误?(Handler示例)
在Oracle关闭情况下如何修改spfile的参数
昵图网官方站入口 昵图网素材图库官网入口
大同网页,大同瑞慈医院官网?
Java解压缩zip - 解压缩多个文件或文件夹实例
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Linux系统命令中tree命令详解
Laravel如何使用查询构建器?(Query Builder高级用法)
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
Laravel如何实现API资源集合?(Resource Collection教程)
如何用wdcp快速搭建高效网站?
javascript日期怎么处理_如何格式化输出
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Bootstrap CSS布局之列表
如何用IIS7快速搭建并优化网站站点?
详解Oracle修改字段类型方法总结
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Laravel模型事件有哪些_Laravel Model Event生命周期详解
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
如何在建站宝盒中设置产品搜索功能?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Python高阶函数应用_函数作为参数说明【指导】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
如何解决hover在ie6中的兼容性问题
浅谈redis在项目中的应用
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在阿里云高效完成企业建站全流程?
Laravel如何实现数据库事务?(DB Facade示例)
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何快速生成橙子建站落地页链接?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
详解MySQL数据库的安装与密码配置
高端建站三要素:定制模板、企业官网与响应式设计优化
动图在线制作网站有哪些,滑动动图图集怎么做?
网站优化排名时,需要考虑哪些问题呢?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
中山网站制作网页,中山新生登记系统登记流程?
如何快速生成ASP一键建站模板并优化安全性?


提取基础名(filename.split('.')[0]);