2013-08-26 1 views
1

저는 python-unipath을 배우려고 노력했으며 기본 명령으로 그립을 얻었습니다. 그러나 나는이 문제에 곤란을 겪었다. 그래서, 나는 현재 파일의 조상 (2)을 얻고 싶다.python unipath : 현재 파일 디렉토리 (조상)에 대한 경로가 아무 것도 출력하지 않습니다.

Python 2.7.3 (default, Jan 2 2013, 13:56:14) 
[GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from unipath import Path 
>>> ORM_ROOT = Path("/home/foo/lump/foobar/turf/orm/unipath_try.py").ancestor(2) 
>>> ORM_ROOT 
Path('/home/foo/lump/foobar/turf') 

올 요식와 정확히 내가 원하는 : 그래서, 파이썬 interpretter에, 나는 이런 일을한다. 지금, 나는과 같이 파일이 포장 :

# -*- coding: utf-8 -*- 
# unipath_try.py 

from unipath import Path 
ORM_ROOT = Path(__file__).ancestor(2) 
print ORM_ROOT 

을 나는 이것이 내가 더 출력을 얻을 python unipath_try.py를 사용하여 실행할 때! 가져 오기 오류가 없습니다. 나는 이것이 왜 그렇게 어리석은 지 완전히 어리둥절 해한다. 이

답변

5

사용 os.path.abspath(__file__) 대신 __file__ :(에 어떤 도움/방향을 감사하겠습니다.

__file__가 귀하의 경우 상대 경로를 포함하기 때문이다.

__file__ 상대 경로 또는 절대를 포함 할 수 있습니다 다른 상황에서 하나 : 당신이 모듈이 포함 sys.path에의 일부 내부가 아닌 경우

그래서, 당신은 앱솔루트를 얻을 수 있습니다 e 경로. 모듈이 들어있는 sys.path 부분에 있다면 상대 경로를 얻을 수 있습니다.

현재 디렉토리에 모듈을로드하고 현재 디렉토리가 sys.path에없는 경우 절대 경로가 표시됩니다.

현재 디렉토리에 모듈을로드하고 현재 디렉토리가 sys.path에 있으면 상대 경로가 표시됩니다.

(Python __file__ attribute absolute or relative?에서 인용)

+0

고맙습니다. 이제 답을 받아 들였습니다 :) – JohnJ

+0

그냥 다음 질문에 답하십시오.'__file__ '대신 모든 경우에'os.path.abspath (__ file __)'을 사용하는 것이 더 좋습니까? – JohnJ

+0

@JohnJ 네, 모든 경우에 적용됩니다. – alecxe

3

당신이 파일이 존재하는 디렉토리에서 스크립트를 실행하는 경우, __file__filename.py입니다. os.path.abspath를 사용

>>> Path('a.py') 
Path(u'a.py') 
>>> Path('a.py').ancestor(2) 
Path(u'') 

패스 절대 경로 :

import os 

from unipath import Path 

ORM_ROOT = Path(os.path.abspath(__file__)).ancestor(2) 
print ORM_ROOT 

가 대체

또한 absolute() 방법을 사용할 수 있습니다.

Path('t.py').absolute().ancestor(2) 
+0

답변 해 주셔서 대단히 감사합니다. 실제로 옳습니다. 그러나 시간에 따라 alecxe의 대답을 받아 들일 것입니다 :) – JohnJ

+0

@ JohnJ, 그건 괜찮습니다. 대안이 있습니다. :) – falsetru

관련 문제