A = os.path.join(os.path.dirname(__file__), '..')
B = os.path.dirname(os.path.realpath(__file__))
C = os.path.abspath(os.path.dirname(__file__))
나는 보통 이것을 실제 경로로 고정 배선합니다. 그러나 런타임에 경로를 결정하는이 문에 대한 이유가 있으며 os.path 모듈을 실제로 사용하고 싶습니다.
답변
파이썬에서 파일에서 모듈을로드 __file__
하면 해당 경로로 설정됩니다. 그런 다음 다른 기능과 함께 사용하여 파일이있는 디렉토리를 찾을 수 있습니다.
한 번에 하나씩 예를 들면 :
A = os.path.join(os.path.dirname(__file__), '..')
# A is the parent directory of the directory where program resides.
B = os.path.dirname(os.path.realpath(__file__))
# B is the canonicalised (?) directory where the program resides.
C = os.path.abspath(os.path.dirname(__file__))
# C is the absolute path of the directory where the program resides.
여기에서 반환 된 다양한 값을 볼 수 있습니다.
import os
print(__file__)
print(os.path.join(os.path.dirname(__file__), '..'))
print(os.path.dirname(os.path.realpath(__file__)))
print(os.path.abspath(os.path.dirname(__file__)))
당신이 (예 : 다른 위치에서 실행해야합니다 ./text.py
, ~/python/text.py
어떤 차이를 만드는을 볼 수 등 등).
답변
먼저 혼란을 해결하고 싶습니다. __file__
와일드 카드가 아닌 속성입니다. 이중 밑줄 속성 및 방법은 규칙에 따라 “특별한”것으로 간주되며 특수한 용도로 사용됩니다.
http://docs.python.org/reference/datamodel.html 은 많은 특수 메소드 및 속성을 보여줍니다 (모두는 아님).
이 경우 __file__
모듈 (모듈 객체)의 속성입니다. 파이썬에서 .py
파일은 모듈입니다. 따라서 상황에 따라 다른 것을 의미 import amodule
하는 속성이 __file__
있습니다.
문서에서 가져온 것 :
__file__
파일에서로드 된 경우 모듈이로드 된 파일의 경로 이름입니다.__file__
인터프리터에 정적으로 링크 된 C 모듈에는 이 속성이 없습니다. 공유 라이브러리에서 동적으로로드 된 확장 모듈의 경우 공유 라이브러리 파일의 경로 이름입니다.
귀하의 경우 모듈이 __file__
전역 네임 스페이스 의 자체 속성에 액세스하고 있습니다.
이것을 실제로 보려면 다음을 시도하십시오.
# file: test.py
print globals()
print __file__
그리고 다음을 실행하십시오.
python test.py
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__file__':
'test_print__file__.py', '__doc__': None, '__package__': None}
test_print__file__.py
답변
당 문서 :
__file__
파일에서로드 된 경우 모듈이로드 된 파일의 경로 이름입니다.__file__
인터프리터에 정적으로 링크 된 C 모듈에는 이 속성이 없습니다. 공유 라이브러리에서 동적으로로드 된 확장 모듈의 경우 공유 라이브러리 파일의 경로 이름입니다.
그리고 또한 :
__file__
모듈이 내장되어 (및에 나열sys.builtin_module_names
되어있는 경우) 속성이 설정되지 않은 경우 파일에 대한 “경로” 가됩니다.
답변
__file__
다양한 os.path
모듈 과 결합 하여 사용 하면 모든 경로가 현재 모듈의 디렉토리 위치에 상대적이됩니다. 이를 통해 모듈 / 프로젝트를 다른 컴퓨터로 이식 할 수 있습니다.
프로젝트에서 수행하는 작업 :
A = '/Users/myname/Projects/mydevproject/somefile.txt'
그런 다음 배포 디렉토리를 사용하여 서버에 배포하려고하면 /home/web/mydevproject/
코드에서 경로를 올바르게 찾을 수 없습니다.