programing

절대 URL과 상대 URL에 가입하는 방법은 무엇입니까?

lastmoon 2023. 6. 21. 22:55
반응형

절대 URL과 상대 URL에 가입하는 방법은 무엇입니까?

URL이 두 개 있습니다.

url1 = "http://127.0.0.1/test1/test2/test3/test5.xml"
url2 = "../../test4/test6.xml"

url2에 대한 절대 URL은 어떻게 얻을 수 있습니까?

urlparse.urljoin을 사용해야 합니다.

>>> import urlparse
>>> urlparse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'

Python 3(urlparse의 이름이 turllib.parse로 변경됨)에서는 다음과 같이 사용할 수 있습니다.

>>> import urllib.parse
>>> urllib.parse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'

상대 경로가 여러 부분으로 구성되어 있는 경우에는 다음과 같이 별도로 결합해야 합니다.urljoin연결되지 않고 상대 경로를 대체합니다.이를 위한 가장 쉬운 방법은posixpath.

>>> import urllib.parse
>>> import posixpath
>>> url1 = "http://127.0.0.1"
>>> url2 = "test1"
>>> url3 = "test2"
>>> url4 = "test3"
>>> url5 = "test5.xml"
>>> url_path = posixpath.join(url2, url3, url4, url5)
>>> urllib.parse.urljoin(url1, url_path)
'http://127.0.0.1/test1/test2/test3/test5.xml'

참고 항목:Python에서 URL을 구성할 때 경로의 구성 요소를 결합하는 방법

사용할 수 있습니다.reduce더 깨끗한 방식으로 Shikhar의 방법을 달성하기 위해.

>>> import urllib.parse
>>> from functools import reduce
>>> reduce(urllib.parse.urljoin, ["http://moc.com/", "path1/", "path2/", "path3/"])
'http://moc.com/path1/path2/path3/'

이 방법을 사용할 경우 각 조각에는 결합 중인 경로 조각임을 나타내기 위해 선행 슬래시가 없는 후행 슬래시가 있어야 합니다.

이것이 더 정확하고 유익하며, 당신에게 다음을 것입니다.path1/URI 경로 조각이며 전체 경로가 아닙니다(예:/path1/) 또는 알 수 없음(예:path1알 수 없는 경로도 가능하지만 전체 경로로 처리됩니다.

추가해야 하는 경우/그것이 부족한 조각으로, 당신은 다음을 할 수 있습니다.

uri = uri if uri.endswith("/") else f"{uri}/"

URI 결의안에 대해 더 배우기 위해, 위키피디아는 몇 가지 좋은 예를 가지고 있습니다.

업데이트

  • 방금 피터 페론이 Shikhar의 답변을 축소하는 것에 대해 언급한 것을 알았지만, 어떻게 하는지 보여주기 위해 여기에 이것을 남겨두겠습니다.

  • 업데이트된 위키백과 URL

es = ['http://127.0.0.1', 'test1', 'test4', 'test6.xml']
base = ''
map(lambda e: urlparse.urljoin(base, e), es)

python 3.0+의 경우 URL에 가입하는 올바른 방법은 다음과 같습니다.

from urllib.parse import urljoin
urljoin('https://10.66.0.200/', '/api/org')
# output : 'https://10.66.0.200/api/org'
>>> from urlparse import urljoin
>>> url1 = "http://www.youtube.com/user/khanacademy"
>>> url2 = "/user/khanacademy"
>>> urljoin(url1, url2)
'http://www.youtube.com/user/khanacademy'

간단하죠.

언급URL : https://stackoverflow.com/questions/8223939/how-to-join-absolute-and-relative-urls

반응형