os.path.dirname(__ file__)は空を返します


164

.pyファイルが実行されている現在のディレクトリのパスを取得したい。

たとえばD:\test.py、コードを含む単純なファイル:

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)

出力が次のようになるのは奇妙です:

D:\
test.py
D:\test.py
EMPTY

私はから同じ結果を期待していますgetcwd()し、path.dirname()

与えられたos.path.abspath = os.path.dirname + os.path.basename理由

os.path.dirname(__file__)

空を返しますか?

回答:


255

os.path.abspath = os.path.dirname + os.path.basename保持しないので。私たちはむしろ

os.path.dirname(filename) + os.path.basename(filename) == filename

両方dirname()basename()だけ考慮にカレントディレクトリを取らずにコンポーネントに渡されたファイル名を分割します。現在のディレクトリも考慮する場合は、明示的に行う必要があります。

絶対パスのディレクトリ名を取得するには、次を使用します

os.path.dirname(os.path.abspath(__file__))

3
こんにちはSvenさん、その通りです。os.path.dirname(os.path.abspath(file))である必要があります。ありがとう!参考までに、最後の行に小さなタイプミスがあります。
フレーク、

11
上記のコメントは太字になっていることに注意してください。元の答えは正しく変更されました
ワトソニック2016年

1
os.path.dirname(filename) + os.path.basename(filename) == filenameディレクトリセパレータが欠落しているため、これはありません。我々はむしろ持っています:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
ジャンポール

私は混乱しています、プログラムにbasedir = os.path.abspath(os.path.dirname(file))を残すべきですか?または何を置き換えますか、またはC:\ Users \ Test \ app.dbのようなパスをどこに置き換えますか?
0004

@ pes04 __file__は現在のファイルの名前に展開されるため、この回答のコードの逐語的なコピーを使用できます。
Sven Marnach、2018年



6
os.path.split(os.path.realpath(__file__))[0]

os.path.realpath(__file__)現在のスクリプトのabspathを返します。os.path.split(abspath)[0]現在のディレクトリを返します


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.