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

时间:2015-05-13 15:07:34

标签: python sys sys.path

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

我知道来自sys.path[0]的{​​{1}}。但我不想解析sys结果字符串。有没有其他方法可以在Python中获取当前目录的父目录?

9 个答案:

答案 0 :(得分:63)

使用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

请注意,dPath个实例,并不总是很方便。您可以在需要时轻松将其转换为str

In [15]: str(d)
Out[15]: '/home/kristina/desire-directory'

答案 1 :(得分:7)

这对我有用(我在Ubuntu上):

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

答案 2 :(得分:6)

import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')

答案 3 :(得分:5)

您可以使用Path.parent模块中的pathlib

from pathlib import Path

# ...

Path(__file__).parent

您可以使用parent的多个来电进一步了解路径:

Path(__file__).parent.parent

答案 4 :(得分:0)

from os.path import dirname
from os.path import abspath

def get_file_parent_dir_path():
    """return the path of the parent directory of current file's directory """
    current_dir_path = dirname(abspath(__file__))
    path_sep = os.path.sep
    components = current_dir_path.split(path_sep)
    return path_sep.join(components[:-1])

答案 5 :(得分:0)

'..'返回当前目录的父目录。

import os
os.chdir('..')

现在您的当前目录将为/home/kristina/desire-directory

答案 6 :(得分:0)

您可以简单地使用../your_script_name.py 例如,假设您的python脚本的路径为trading system/trading strategies/ts1.py。引用位于volume.csv中的trading system/data/。您只需要将其称为../data/volume.csv

答案 7 :(得分:0)

import os def parent_directory():#创建到的相对路径 当前工作目录的父级编号 路径= os.getcwd() 父= os.path.dirname(路径)

relative_parent = os.path.join(path, parent)

# Return the absolute path of the parent directory
return relative_parent

print(parent_directory())

答案 8 :(得分:0)

import os
import sys
from os.path import dirname, abspath

d = dirname(dirname(abspath(__file__)))
print(d)
path1 = os.path.dirname(os.path.realpath(sys.argv[0]))
print(path1)
path = os.path.split(os.path.realpath(__file__))[0]
print(path)