我想从Python脚本获取当前目录的父目录。例如,我从/home/kristina/desire- directory/scripts欲望路径启动脚本,在这种情况下是/home/kristina/desire-directory
/home/kristina/desire- directory/scripts
/home/kristina/desire-directory
我知道sys.path[0]从sys。但是我不想解析sys.path[0]结果字符串。还有其他方法可以在Python中获取当前目录的父目录吗?
sys.path[0]
sys
要 获取包含脚本的目录的父目录 (无论当前工作目录如何),都需要使用__file__。
__file__
在脚本内部使用os.path.abspath(__file__)来获取脚本的绝对路径,并调用os.path.dirname两次:
os.path.abspath(__file__)
os.path.dirname
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:
os.getcwd
import os d = os.path.dirname(os.getcwd())
您也可以使用该pathlib模块(在Python 3.4或更高版本中可用)。
pathlib
每个pathlib.Path实例都具有parent引用父目录的parents属性以及该属性,该属性是路径的祖先列表。Path.resolve可以用来获取绝对路径。它还可以解决所有符号链接,但是Path.absolute如果您不希望这样做,可以使用它。
pathlib.Path
parent
parents
Path.resolve
Path.absolute
Path(__file__)分别Path()代表脚本路径和当前工作目录,因此,为了 获得脚本目录的父目录 (无论当前工作目录如何),您可以使用
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在需要时将其轻松转换为:
d
Path
str
In [15]: str(d) Out[15]: '/home/kristina/desire-directory'