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这个目录名,分两步走就好:
- 先用
os.path.dirname(__file__)获取当前文件所在的完整目录路径(也就是/home/user/pythonfiles/test_files) - 再对这个目录路径用
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
相关产品推荐
相关产品推荐

