如何从含多扩展名的文件路径中提取基础文件名
解决双层扩展名的文件名提取问题
我明白你遇到的困扰——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
相关产品推荐
相关产品推荐

