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

Python中如何从文件绝对路径提取文件名与倒数第二层子目录名

Python中如何从文件绝对路径提取文件名与倒数第二层子目录名

嗨,我来帮你搞定这个问题!你已经成功提取出文件名的思路是对的,不过先给你提个小优化点——如果文件名里包含多个点(比如test1.v2.py),用split('.')[0]会只拿到第一个点前面的部分,不够通用。我给你个更稳妥的写法,同时再一步步教你提取倒数第二层的子目录名~

先优化文件名提取(适配更多场景)

你原来的代码是:

sess_name = os.path.basename(__file__).split('.')[0]
print("file name is " + sess_name)

可以改成用os.path.splitext来处理,不管文件名有多少个点,都能准确拿到不带后缀的文件名:

import os

sess_name = os.path.splitext(os.path.basename(__file__))[0]
print(f"file name is {sess_name}")

提取倒数第二层子目录名

要拿到test_files这个目录名,分两步走就好:

  1. 先用os.path.dirname(__file__)获取当前文件所在的完整目录路径(也就是/home/user/pythonfiles/test_files)
  2. 再对这个目录路径用os.path.basename(),就能得到最后一级目录名,也就是你要的test_files

完整代码示例:

import os

# 提取文件名(优化版)
sess_name = os.path.splitext(os.path.basename(__file__))[0]
print(f"file name is {sess_name}")

# 提取倒数第二层子目录名
file_parent_dir = os.path.dirname(__file__)
last_subdir = os.path.basename(file_parent_dir)
print(f"last subdirectory is {last_subdir}")

更简洁的方式:用pathlib(Python3.4+推荐)

如果你用的是Python3.4及以上版本,推荐用pathlib模块,它的路径操作更直观、面向对象:

from pathlib import Path

current_file = Path(__file__)

# 提取文件名
sess_name = current_file.stem
print(f"file name is {sess_name}")

# 提取倒数第二层子目录名
last_subdir = current_file.parent.name
print(f"last subdirectory is {last_subdir}")

这里current_file.parent直接就是文件所在的目录,.name属性就是该目录的名称,是不是比os模块的写法更清晰?

备注:内容来源于stack exchange,提问作者nmr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:23:07