Python如何跨盘符动态遍历目录获取指定父级中间目录
动态获取上级目录路径,不依赖盘符的解决方案
我来给你捋捋怎么解决这个问题——其实核心就是利用__file__变量结合os模块(或者更现代的pathlib)的路径处理函数,动态从当前脚本的位置往上追溯到目标层级,完全不用硬编码盘符或者固定路径。
方法一:使用os.path模块(兼容所有Python版本)
咱们一步步来:
先拿到当前脚本
myfile.py的绝对路径,避免相对路径的坑:import os script_abspath = os.path.abspath(__file__)这时候
script_abspath的值就是当前脚本的实际绝对路径(不管盘符是C、D还是其他,都会自动识别)。接着拿到脚本所在的目录:
script_dir = os.path.dirname(script_abspath)现在
script_dir对应C:\A\B\C\D\E\F这个目录。从这个目录往上跳3级,就能到达
C:\A\B\C(因为从F到C需要经过E、D两级,总共跳3次):
你可以直接嵌套os.path.dirname():target_base_dir = os.path.dirname(os.path.dirname(os.path.dirname(script_dir)))如果层级更多,写个小函数循环处理更方便:
def get_parent_dir(path, up_levels): for _ in range(up_levels): path = os.path.dirname(path) return path target_base_dir = get_parent_dir(script_dir, 3)最后拼接上
PythonPackages目录,并添加到sys.path:import sys local_package_dir = os.path.join(target_base_dir, 'PythonPackages') sys.path.insert(0, local_package_dir)
方法二:使用pathlib模块(Python 3.4+推荐,更简洁)
pathlib是Python 3.4引入的面向对象路径处理模块,代码更直观易读:
from pathlib import Path import sys # 拿到当前脚本的绝对路径对象 script_path = Path(__file__).resolve() # 往上跳3级:每个.parent代表上一级目录 target_base_dir = script_path.parent.parent.parent # 拼接目标目录 local_package_dir = target_base_dir / 'PythonPackages' # 添加到sys.path(需要转成字符串) sys.path.insert(0, str(local_package_dir))
这两种方法都完全不依赖固定盘符,不管用户把整个A\B\C目录放在哪个盘里,脚本都能自动找到正确的PythonPackages路径,而且跨平台兼容Windows、Linux和macOS。
内容的提问来源于stack exchange,提问作者JacobIRR
相关产品推荐
相关产品推荐

