>>> os.path.basename('http://example.com/file.txt')
'file.txt'
.. 그리고 나는 os.path.*
이 URL이 아닌 로컬 경로에서만 작동한다고 생각 했습니까? 위의 예제는 Windows에서도 실행되었습니다. 비슷한 결과가 나타납니다.os.path.basename은 URL과 함께 작동합니다. 그 이유는 무엇입니까?
>>> os.path.basename('http://example.com/file.txt')
'file.txt'
.. 그리고 나는 os.path.*
이 URL이 아닌 로컬 경로에서만 작동한다고 생각 했습니까? 위의 예제는 Windows에서도 실행되었습니다. 비슷한 결과가 나타납니다.os.path.basename은 URL과 함께 작동합니다. 그 이유는 무엇입니까?
많은 기능 그냥 문자열 조작 함수 (단지 경로 조작에 특히 유용 할 일이있는) - 그리고 공식적으로 "잘못된"말하는 동안 즉, 무해한 때때로 편리 이후,이 의지를 의심 파이썬 3,
$ python -c"import sys; import StringIO; x = StringIO.StringIO(); sys.stdout = x; import this; sys.stdout = sys.__stdout__; print x.getvalue().splitlines()[10][9:]"
또는 :
$ python -c"import sys; import io; x = io.StringIO(); sys.stdout = x; import this; sys.stdout = sys.__stdout__; print(x.getvalue().splitlines()[10][9:])"
, 소스 코드를 보면 : C : \ Python25 \ lib 디렉토리 \을 (같은 파일의)
def basename(p):
"""Returns the final component of a pathname"""
return split(p)[1]
os.path.split 단지 분할 "\"(와 STH ntpath.py. 다른)
소스 눅 사용
def basename(p):
"""Returns the final component of a pathname"""
i = p.rfind('/') + 1
return p[i:]
편집 설명에 (응답) :
그것은 우연히 URL을 위해 작동합니다. 그 때문에, 그 행동을 악용하는 것은 코드 냄새라고 여겨 질 수 있습니다. 이 (통과 경로가 URL이 아닌지 확인) "수정"하려고
도 의외로 어려운
www.google.com/test.php
[email protected]/12
./src/bin/doc/goto.c
그래서 http:/hello.txt
(하나이며, 동시에 올바른 경로 이름 및 URL (상대)에있다/, 그리고 리눅스에서만, 그리고 그것은 다소 어리 석다 :)). 절대 URL을 위해 "수정"할 수 있지만 상대 URL은 여전히 작동합니다. 다르게 하나의 특별한 경우를 다루는 것은 파이썬 세계에서 큰 문제가 아닙니다.
을 정리해 : 수입이
이유는 무엇입니까? URL을 구문 분석하고 로컬 파일 경로를 파싱하는 데 유용하기 때문입니다. 왜 안돼? os.path
의
os.path 모듈에 있기 때문에 Windows를 실행하는 경우 OS에서 이해할 수있는 경로가 아닙니다. 경로 분리자는 다릅니다. 나는 /이 유효한 파일 이름 인 URL을 만드는 Windows에서 유효한 파일 이름 문자이며이 동작이 올바르지 않다고 생각합니다. 나는 Windows 사용자가 아니기 때문에이 주석의 일부 또는 전부가 횡설수설 일 수 있습니다. – SpoonMeiser
@SpoonMeiser, 마이크로 소프트의 C 라이브러리 구현은 실제로 /를 유효한 대안으로 사용할 수있게합니다 (OS 자체는 syscall/Win32API 레벨에서 한 단계까지 했었지만 몇 년 전부터는 그렇지 않습니다) ;-). –
@Alex Martelli, 그게 여전히 사실이라면 말이 될 것입니다. – SpoonMeiser
Forw 쉘/명령 프롬프트에서 다음과 같은 간단한 한 줄을 사용, 자세한 내용은 - 곧 변경 ard slash는 Windows에서 허용되는 경로 구분 기호입니다.
args 스위치에 해당 문자가 예약되어 있기 때문에 명령 행에서 /로 시작하는 경로를 허용하지 않는 것입니다.
설명 : 나는 왜/왜/작동하는지 (소스 코드가 분명히 갈 길이 멀다.) 묻지 않을 것이다. 왜 나는 그것이 (특히 Windows '\'는 경로 구분자 인) 정책에 의해 왜 작동해야하는지 묻습니다. –
Microsoft OSes는'Dos 2'의 경로 구분자로'/'를 사용합니다. 명령 줄 옵션 플래그 표기법과 충돌하기 때문에'/'는 명령 셸에 의해 비활성화되었습니다 (더 이상은 아닙니다). 이 때문에 많은 구현은 단순히'/'의 유효성을 알지 못합니다. 파이썬은 분명히 있습니다. 또한'\\? \ "접두어에는 슬래시를 사용할 수 없습니다. 소스 http://bytes.com/topic/python/answers/23123-when-did-windows-start-accepting-forward-slash-path-separator 및 http://msdn.microsoft.com/en-us/library /aa365247(VS.85).aspx#paths – n611x007