web-dev-qa-db-ja.com

現在のディレクトリとファイルのディレクトリを探す

Pythonでは、どのコマンドを使って見つけることができますか?

  1. 現在のディレクトリ(Pythonスクリプトを実行したときに端末にいた場所)
  2. 実行しているファイルはどこにありますか。
1802
John Howard

Pythonファイルが含まれているディレクトリへのフルパスを取得するには、そのファイルに次のように書きます。

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

__file__定数の値は現在の作業ディレクトリからの相対値であり、os.chdir()呼び出しでは変更されないため、現在の作業ディレクトリを変更するためにos.chdir()を既に使用している場合、上記の呪文は機能しません。)


現在の作業ディレクトリを取得するには

import os
cwd = os.getcwd()

上記で使用されているモジュール、定数、関数のドキュメントリファレンス

2802
Russell Dias

現在の作業ディレクトリ: os.getcwd()

そして __file__属性 は、実行しているファイルがどこにあるのかを見つけるのに役立ちます。このSO投稿はすべてを説明しています: Pythonで現在実行されているファイルのパスを取得するにはどうすればいいですか?

295
Nix

あなたはこれが参考になるかもしれません:

import os

print("Path at terminal when executing this file")
print(os.getcwd() + "\n")

print("This file path, relative to os.getcwd()")
print(__file__ + "\n")

print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")

print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")

print("This file directory only")
print(os.path.dirname(full_path))
247
Daniel Reis

pathlib module、 introduced in Python 3.4( PEP 428 — pathlibモジュール—オブジェクト指向のファイルシステムパス )は、パス関連のエクスペリエンスが大幅に向上しました。

$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py

現在の作業ディレクトリを取得するには、 Path.cwd() を使用します。

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

スクリプトファイルへの絶対パスを取得するには、 Path.resolve() メソッドを使用します。

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

スクリプトが配置されているディレクトリのパスを取得するには、 .parent にアクセスします(.parentの前に.resolve()を呼び出すことをお勧めします)。

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

__file__は状況によっては信頼できないことに注意してください。 Pythonで現在実行されているファイルのパスを取得するにはどうすればよいですか?


Path.cwd()Path.resolve()およびその他のPathメソッドは、文字列ではなくパスオブジェクト( PosixPath )を返すことに注意してください。 open 組み込み関数は文字列またはバイトオブジェクトでしか動作せず、Pathオブジェクトをサポートしていなかったため、Python 3.4および3.5では多少の痛みが生じました。 Pathオブジェクトを文字列にするか、 Path.open() メソッドを使用しますが、後者のオプションでは古いコードを変更する必要があります。

$ cat scripts/2.py
from pathlib import Path

p = Path(__file__).resolve()

with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass

print('OK')

$ python3.5 scripts/2.py
Traceback (most recent call last):
  File "scripts/2.py", line 11, in <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

ご覧のとおり、open(p)はPython 3.5では機能しません。

PEP 519 —ファイルシステムパスプロトコルの追加 、Python 3.6で実装、 PathLike オブジェクトのサポートを open 関数に追加、そのため、Pathオブジェクトをopen関数に直接渡すことができます:

$ python3.6 scripts/2.py
OK
58
skovorodkin

1.カレントディレクトリのフルパスを取得する

    >>import os
    >>print os.getcwd()

o/p: "C:\ Users\admin\myfolder"

1.カレントディレクトリのフォルダ名だけを取得する

    >>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o/p: "myfolder"

54
vinithravit

あなたが現在いるファイルの現在のディレクトリを見つけようとしているなら:

OSにとらわれない方法:

dirname, filename = os.path.split(os.path.abspath(__file__))
37
Kurt

Python 3.4を使用している場合は、他の多くの新機能とともに、現在の作業ディレクトリを表すpathlibオブジェクトを取得するためにpathlib.Path.cwd()を便利に呼び出すことができる、まったく新しい上位レベルのPathモジュールがあります。

この新しいAPIに関するより多くの情報は ここ にあります。

29
Jazzer

#1への答え:

現在のディレクトリが欲しいならば、これをしてください:

import os
os.getcwd()

任意のフォルダ名が必要で、そのフォルダへのパスがある場合は、次の操作を行います。

def get_folder_name(folder):
    '''
    Returns the folder name, given a full folder path
    '''
    return folder.split(os.sep)[-1]

#2への答え:

import os
print os.path.abspath(__file__)
27
Blairg23

パーティーには少し遅れますが、現在の実行コンテキストの名前だけを見つける最も簡潔な方法は、

current_folder_path, current_folder_name = os.path.split(os.getcwd())
27
StormShadow

Pathlibは、現在のスクリプトを含むディレクトリを取得するためにこのように使用することができます。

import pathlib
filepath = pathlib.Path(__file__).resolve().parent
17
Mathieu C.

現在のディレクトリのフルパスを取得するには:

os.path.realpath( '。')

17
Ilia S.

現在実行されているスクリプトの場所を検索している場合は、sys.argv[0]を使用してフルパスを取得できます。

16
Grochni

現在の作業ディレクトリを確認するには、次のスクリプトを入力します。

import os
current_working_directory = os.getcwd()
9
Mohammad Hassan

質問1にはos.getcwd() # get working diros.chdir(r'D:\Steam\steamapps\common') # set working dirを使用します


sys.argv[0]は不変であり、常に現在のファイル(モジュールオブジェクトパス)を返し、os.chdir()の影響を受けないため、質問2にはsys.argvを使用することをお勧めします。また、あなたはこのようにすることができます:

import os
this_py_file = os.path.realpath(__file__)

# vvv Below comes your code vvv #

しかし、そのスニペットとsys.argv[0]は動作しないか、PyInstallerでコンパイルされたときに動作しません。これは、マジックプロパティが__main__レベルで設定されておらず、sys.argv[0]作業ディレクトリの影響を受けます)。

6

作業ディレクトリをpythonで取得する。次のコードを使用することができます。

import os
cwd = os.getcwd() #to get current working directory
print(cwd)
4
Nirali Khoda