Pythonスクリプトからカレントディレクトリの親を取得する
質問
Pythonスクリプトからカレントディレクトリの親を取得したい。例えば、私はスクリプトを
/home/kristina/desire-directory/scripts
から起動した場合、この場合の希望するパスは
/home/kristina/desire-directory
私が知っているのは
sys.path[0]
から
sys
. しかし、私はパースしたくない
sys.path[0]
結果文字列をパースしたくない。Pythonでカレントディレクトリの親を取得するための他の方法はありますか?
どのように解決するのですか?
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
なお
d
は
Path
のインスタンスで、これはいつも便利とは限りません。これを変換して
str
に簡単に変換できます。
In [15]: str(d)
Out[15]: '/home/kristina/desire-directory'
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] 現在のファイルのディレクトリのフルパスを取得するにはどうすればよいですか?
-
[解決済み] モジュールのパスを取得する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Python 3での相対インポート
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Python Empty Generator 関数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] pycharmがタブをスペースに自動変換する