web-dev-qa-db-ja.com

Python scriptから現在のディレクトリの親を取得

現在のディレクトリの親をPython script。から取得します。たとえば、/home/kristina/desire-directory/scriptsこの場合の欲望のパスは/home/kristina/desire-directory

知っている sys.path[0] from sys。しかし、私は解析したくないsys.path[0]結果の文字列。 Pythonで現在のディレクトリの親を取得する別の方法はありますか?

33

Os.pathを使用する

スクリプトを含むディレクトリの親ディレクトリを取得(現在の作業ディレクトリに関係なく)するには、___file___を使用する必要があります。

スクリプト内で os.path.abspath(__file__) を使用してスクリプトの絶対パスを取得し、 _os.path.dirname_ を2回呼び出します。

_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'
_
72
vaultah

これは私のために働いた(私はUbuntuにいます):

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

つかいます Path.parentpathlibモジュールから:

from pathlib import Path

# ...

Path(__file__).parent

parentへの複数の呼び出しを使用して、パスをさらに進めることができます。

Path(__file__).parent.parent
7
Gavriel Cohen
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, '../../')
6
corvid

単純にuse../your_script_name.pyを使用できます。たとえば、pythonスクリプトへのパスはtrading system/trading strategies/ts1.pyです。volume.csvにあるtrading system/data/を参照するとします。単に../data/volume.csvとして参照する必要があります

0
Yanqi Huang

'..'は、現在のディレクトリの親を返します。

import os
os.chdir('..')

現在のディレクトリは/home/kristina/desire-directory

0
Marcin