나는 현재 실행중인 Python 스크립트와 같은 디렉토리에있는 파일을 단순히 다음과 같은 명령을 사용하여 열었습니다.
open("Some file.txt", "r")
그러나 스크립트를 두 번 클릭하여 Windows에서 스크립트를 실행할 때 잘못된 디렉토리에서 파일을 열려고 시도했습니다.
그 이후로 나는 형태의 명령을 사용했다
open(os.path.join(sys.path[0], "Some file.txt"), "r")
파일을 열 때마다 이것은 내 특정 용도로 작동하지만 sys.path[0]
다른 사용 사례에서 실패 할 수 있는지 확실하지 않습니다 .
그래서 내 질문은 : 현재 실행중인 Python 스크립트와 동일한 디렉토리에있는 파일을 여는 가장 신뢰할 수있는 방법은 무엇입니까?
내가 지금까지 알아낼 수 있었던 것은 다음과 같습니다.
os.getcwd()
그리고os.path.abspath('')
"현재 작업 디렉토리"가 아닌 스크립트 디렉토리를 반환합니다.os.path.dirname(sys.argv[0])
그리고os.path.dirname(__file__)
상대 또는 공백 (스크립트가 CWD에있는 경우) 수있는 스크립트를 호출하는 데 사용되는 경로를 반환합니다. 또한__file__
스크립트가 IDLE 또는 PythonWin에서 실행될 때 존재하지 않습니다.sys.path[0]
및os.path.abspath(os.path.dirname(sys.argv[0]))
스크립트 디렉토리를 반환하는 것 같다. 이 둘 사이에 차이점이 있는지 확실하지 않습니다.
편집하다:
방금 내가하고 싶은 것이 "포함 모듈과 같은 디렉토리에 파일을 여는 것"으로 더 잘 설명 될 것이라는 것을 깨달았습니다. 즉, 다른 디렉토리에 작성한 모듈을 가져오고 해당 모듈이 파일을 열면 모듈의 디렉토리에서 파일을 찾고 싶습니다. 내가 찾은 것이 그렇게 할 수 있다고 생각하지 않습니다 ...
__file__
수 없으면sys.argv[0]
대신 을 사용하십시오dirname(__file__)
. 나머지는 예상대로 작동합니다.__file__
라이브러리 코드에서sys.argv[0]
일부 타사 스크립트를 통해 가져온 경우 코드를 전혀 가리 키지 않을 수 있기 때문에 사용하는 것이 좋습니다.