使用os.path
要获取包含脚本的目录的父目录(无论当前工作目录如何),您需要使用__file__.
from os.path import dirname, abspath
d = dirname(dirname(abspath(__file__))) # /home/kristina/desire-directory
基本上,您可以通过根据需要多次调用os.path.dirname来走向目录树.例:
In [4]: from os.path import dirname
In [5]: dirname('/home/kristina/desire-directory/scripts/script.py')
Out[5]: '/home/kristina/desire-directory/scripts'
In [6]: dirname(dirname('/home/kristina/desire-directory/scripts/script.py'))
Out[6]: '/home/kristina/desire-directory'
如果要获取当前工作目录的父目录,请使用os.getcwd:
import os
d = os.path.dirname(os.getcwd())
使用pathlib
您还可以使用pathlib模块(可用于Python 3.4或更新版本).
每个pathlib.Path实例都有父属性引用父目录,以及parent属性,它是路径的祖先列表. Path.resolve可以用来获得绝对路径.它还解析所有符号链接,但如果不是所需的行为,则可以使用Path.absolute.
Path(__ file__)和Path()分别表示脚本路径和当前工作目录,因此为了获取脚本目录的父目录(不考虑当前工作目录),您将使用
from pathlib import Path
# `path.parents[1]` is the same as `path.parent.parent`
d = Path(__file__).resolve().parents[1] # Path('/home/kristina/desire-directory')
并获取当前工作目录的父目录
from pathlib import Path
d = Path().resolve().parent
请注意,d是一个Path实例,它并不总是方便.您可以在需要时轻松将其转换为str:
In [15]: str(d)
Out[15]: '/home/kristina/desire-directory'