67 votes

Conversion d'un chemin d'accès relatif en chemin d'accès absolu

Existe-t-il une bibliothèque en python qui fonctionne de cette manière ?

>>> resolvePath("http://www.asite.com/folder/currentpage.html", "anotherpage.html")
'http://www.asite.com/folder/anotherpage.html'
>>> resolvePath("http://www.asite.com/folder/currentpage.html", "folder2/anotherpage.html")
'http://www.asite.com/folder/folder2/anotherpage.html'
>>> resolvePath("http://www.asite.com/folder/currentpage.html", "/folder3/anotherpage.html")
'http://www.asite.com/folder3/anotherpage.html'
>>> resolvePath("http://www.asite.com/folder/currentpage.html", "../finalpage.html")
'http://www.asite.com/finalpage.html'

116voto

James Brady Points 11646

Oui, il y a urlparse.urljoin ou urllib.parse.urljoin pour Python 3.

>>> try: from urlparse import urljoin # Python2
... except ImportError: from urllib.parse import urljoin # Python3
...
>>> urljoin("http://www.asite.com/folder/currentpage.html", "anotherpage.html")
'http://www.asite.com/folder/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "folder2/anotherpage.html")
'http://www.asite.com/folder/folder2/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "/folder3/anotherpage.html")
'http://www.asite.com/folder3/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "../finalpage.html")
'http://www.asite.com/finalpage.html'

pour le copier-coller :

try:
    from urlparse import urljoin  # Python2
except ImportError:
    from urllib.parse import urljoin  # Python3

0 votes

Pour un remplacement conforme à la RFC 3986 et à l'unicode, voir uritools .

0 votes

Malheureusement, cela ne fonctionne pas si le deuxième composant est absolu. Par exemple, urljoin("http://example.com/blah.html", "./././whoa.html") fait supprimer les points, tandis que urljoin("http://example.com/blah.html", "/./././whoa.html") ne le fait pas.

9voto

Pikamander2 Points 2060

Vous pouvez également appeler le urljoin par le biais de la fonction requests bibliothèque.

Ce code :

import requests

requests.compat.urljoin('http://example.com/foo.html', 'bar.html')

Retournera une valeur de http://example.com/bar.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X