2013-08-08 4 views
4

은 내가 출력 5, 6, 7 및 8은 직관적으로 찾을os.path.join은 파이썬에서 'wrong'경로를 반환합니까?

import os.path as path 
path.join("/", "tmp") 
Out[4]: '/tmp' 
path.join("/", "/tmp") 
Out[5]: '/tmp' 
path.join("abc/", "/tmp") 
Out[6]: '/tmp' 
path.join("abc", "/tmp") 
Out[7]: '/tmp' 
path.join("/abc", "/tmp") 
Out[8]: '/tmp' 
path.join("def", "tmp") 
Out[10]: 'def/tmp' 

ipython에서 다음 파이썬을 os.path 출력을 갖는다. 이 구현을위한 특별한 이유가 있다면 누군가가 설명해 주실 수 있습니까? os.path.join() documentation에서

+0

절대 경로가 'join'에 대한 첫 번째 인수가 아닌 이유가 * 없습니다. 'join '은 컴포넌트를 가진 * a * 경로를 만드는 것을 의미합니다. 절대 경로가 "하위 경로"로없는 경로가 없습니다. 'join ("/", "/ tmp")'로 무엇을 기대합니까? – Bakuriu

+0

이 맞습니다! 나는 그 구현을 잘 정당화한다고 생각한다! 감사! –

답변

15

:

하나 개 이상의 요소들을 지능적으로 가입. 구성 요소가 절대 경로 인 경우 모든 이전 구성 요소 (이전 드라이브 문자가있는 경우 Windows 포함)가 버리고 결합이 계속됩니다. 시작에서 /

/tmp는 절대 경로한다.

는 아마도는 선행 경로 분리기를 포함 후, 그 첫 번째 스트립 것을 다중 경로 요소에 가입하고자한다면 :

os.path.join(*(elem.lstrip(os.sep) for elem in elements)) 

특수 케이싱 절대 경로 상대 경로를 지정하는 것이 가능하게 (기본 상위 디렉토리에서) 또는은 절대 경로이며 최종 값을 생성 할 때 절대 경로 또는 상대 경로가 있는지 여부를 감지 할 필요가 없습니다.

+0

감사합니다! 지금 그것을 이해했다! –

3

두 번째 문자열은 /으로 시작하면 안됩니다. 절대 경로을 만듭니다. 는 일 다음을 수행 : 파이썬 문서에서

>>> path.join('abc/', 'tmp') 
'abc/tmp' 

:

구성 요소가 절대 경로 인 경우, 이전의 모든 구성 요소 (Windows에서 이전 드라이브 문자를 포함하여, 하나가 있다면)입니다 버려지고, 계속 합류한다.

관련 문제