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

如何从含多扩展名的文件路径中提取基础文件名

解决双层扩展名的文件名提取问题

我明白你遇到的困扰——os.path.splitext()默认只处理最后一个扩展名,对于像.fastq.gz这种双层后缀的文件,直接用它只能去掉.gz,没法一步到位拿到目标的基础文件名。这里有几种实用的方法帮你解决这个问题:

方法1:多次调用os.path.splitext()

通过两次调用splitext()去掉两层扩展名,再提取最终的文件名:

import os

f_file = "/home/reads_dataset_1/E2_ER/E2_ER_exp1_L1.fastq.gz"
# 第一次去掉.gz,得到带.fastq的完整路径
temp_path = os.path.splitext(f_file)[0]
# 第二次去掉.fastq,得到无扩展名的完整路径
path_without_exts = os.path.splitext(temp_path)[0]
# 提取路径中的文件名部分
sample_name = os.path.basename(path_without_exts)
print(sample_name)  # 输出结果: E2_ER_exp1_L1

方法2:字符串定向分割(适合固定双层扩展名)

如果你的文件都是.fastq.gz结尾,可以直接从文件名右侧定向分割一次,避免干扰文件名中的其他.:

import os

f_file = "/home/reads_dataset_1/E2_ER/E2_ER_exp1_L1.fastq.gz"
# 先提取文件名,再去掉末尾的.fastq.gz
sample_name = os.path.basename(f_file).rsplit('.fastq.gz', 1)[0]
print(sample_name)  # 输出结果: E2_ER_exp1_L1

方法3:使用pathlib(Python3.4+推荐)

pathlib是Python3.4+引入的现代路径处理库,代码更简洁直观:

from pathlib import Path

f_file = "/home/reads_dataset_1/E2_ER/E2_ER_exp1_L1.fastq.gz"
file_path = Path(f_file)
# 两次调用with_suffix('')依次去掉.gz和.fastq,再取文件名
sample_name = file_path.with_suffix('').with_suffix('').name
print(sample_name)  # 输出结果: E2_ER_exp1_L1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:31:55