os.path.dirname (__ file__)이 비어 있음을 반환


165

.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__)

비어있는?

답변:


257

os.path.abspath = os.path.dirname + os.path.basename보유하지 않기 때문에 . 우리는 오히려

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

모두 dirname()basename() 전용 계정에 현재 디렉토리를 복용하지 않고 구성 요소로 전달 된 파일 이름을 분할합니다. 현재 디렉토리도 고려하려면 명시 적으로 지정해야합니다.

절대 경로의 dirname을 얻으려면

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

3
안녕하세요 스벤, 당신 말이 맞습니다, os.path.dirname (os.path.abspath ( file )) 이어야합니다 . 감사! 참고로, 마지막 줄에 작은 오타가 있습니다.
플레이크

11
위의 주석에는 마크 다운 형식으로 인해 양쪽에 밑줄이 있어야하는 곳에 굵게 표시되어 있습니다. 원래 답변이 올바르게 변경되었습니다
watsonic

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


7
import os.path

dirname = os.path.dirname(__file__) or '.'

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

os.path.realpath(__file__)현재 스크립트의 절대 값을 반환합니다. os.path.split (abspath) [0]은 현재 디렉토리를 반환


5
print(os.path.join(os.path.dirname(__file__))) 

이 방법으로도 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.