从 Python 脚本获取当前目录的父目录
Get parent of current directory from Python script
我想从 Python 脚本中获取当前目录的父目录。例如,我从 /home/kristina/desire-directory/scripts
启动脚本,在这种情况下,期望路径是 /home/kristina/desire-directory
我从 sys
知道 sys.path[0]
。但我不想解析 sys.path[0]
结果字符串。在Python中有没有其他方法获取当前目录的父目录?
使用os.path
要获取包含脚本的目录的父目录(不管当前工作目录是什么),您需要使用__file__
.
在脚本中使用 os.path.abspath(__file__)
to obtain the absolute path of the script, and call 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
模块(在 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'
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')
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])
这对我有用(我在 Ubuntu):
import os
os.path.dirname(os.getcwd())
使用 pathlib
模块中的 Path.parent
:
from pathlib import Path
# ...
Path(__file__).parent
您可以多次调用 parent
以在路径中走得更远:
Path(__file__).parent.parent
'..'
returns 当前目录的父目录。
import os
os.chdir('..')
现在您的当前目录将是 /home/kristina/desire-directory
。
您可以简单地使用../your_script_name.py
例如,假设 python 脚本的路径是 trading system/trading strategies/ts1.py
。引用 volume.csv
位于 trading system/data/
。您只需将其称为 ../data/volume.csv
import os def parent_directory(): # Create a relative path to the
parent # of the current working directory
path = os.getcwd()
parent = os.path.dirname(path)
relative_parent = os.path.join(path, parent)
# Return the absolute path of the parent directory
return relative_parent
print(parent_directory())
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)
我想从 Python 脚本中获取当前目录的父目录。例如,我从 /home/kristina/desire-directory/scripts
启动脚本,在这种情况下,期望路径是 /home/kristina/desire-directory
我从 sys
知道 sys.path[0]
。但我不想解析 sys.path[0]
结果字符串。在Python中有没有其他方法获取当前目录的父目录?
使用os.path
要获取包含脚本的目录的父目录(不管当前工作目录是什么),您需要使用__file__
.
在脚本中使用 os.path.abspath(__file__)
to obtain the absolute path of the script, and call 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
模块(在 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'
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')
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])
这对我有用(我在 Ubuntu):
import os
os.path.dirname(os.getcwd())
使用 pathlib
模块中的 Path.parent
:
from pathlib import Path
# ...
Path(__file__).parent
您可以多次调用 parent
以在路径中走得更远:
Path(__file__).parent.parent
'..'
returns 当前目录的父目录。
import os
os.chdir('..')
现在您的当前目录将是 /home/kristina/desire-directory
。
您可以简单地使用../your_script_name.py
例如,假设 python 脚本的路径是 trading system/trading strategies/ts1.py
。引用 volume.csv
位于 trading system/data/
。您只需将其称为 ../data/volume.csv
import os def parent_directory(): # Create a relative path to the parent # of the current working directory path = os.getcwd() parent = os.path.dirname(path)
relative_parent = os.path.join(path, parent) # Return the absolute path of the parent directory return relative_parent
print(parent_directory())
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)