小编典典

从Python脚本获取当前目录的父目录

python

我想从Python脚本获取当前目录的父目录。例如,我从/home/kristina/desire- directory/scripts欲望路径启动脚本,在这种情况下是/home/kristina/desire-directory

我知道sys.path[0]sys。但是我不想解析sys.path[0]结果字符串。还有其他方法可以在Python中获取当前目录的父目录吗?


阅读 227

收藏
2021-01-20

共1个答案

小编典典

使用os.path

获取包含脚本的目录的父目录 (无论当前工作目录如何),都需要使用__file__

在脚本内部使用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

import os
d = os.path.dirname(os.getcwd())

使用pathlib

您也可以使用该pathlib模块(在Python 3.4或更高版本中可用)。

每个pathlib.Path实例都具有parent引用父目录的parents属性以及该属性,该属性是路径的祖先列表。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'
2021-01-20