¿Cómo lo usamos urljoincon 3 o parámetros de modo o qué biblioteca recomiendan para esto?
Mesut Tasci
@mesuutt intenta hacer un bucle y unir cada parte con la URL previamente unida.
Cédric Julien
2
@ CédricJulien: un bucle simple no funcionará, ya que cualquier ruta con un líder /se "restablecerá" y devolverá el esquema + netloc + lasturl:urlparse.urljoin('http://www.a.com/b/c/d', '/e') => 'http://www.a.com/e'
MestreLion
Si usa urljoin, hay un problema. Por ejemplo, urljoin('http://www.a.com/', '../../b/c.png')el resultado es 'http://www.a.com/../../b/c.png', pero no http://www.a.com/b/c.png. Entonces, ¿hay algún método para conseguirlo http://www.a.com/b/c.png?
bigwind
1
El enlace a la documentación de Python 3 apunta a la documentación de Python 2, debe actualizarse en la respuesta, es docs.python.org/3.6/library/…
Harsh
8
Si su ruta relativa consta de varias partes, debe unirlas por separado, ya urljoinque reemplazaría la ruta relativa, no uniría. La forma más sencilla de hacerlo es usar posixpath.
Buena forma de respaldar una lista de valores. Sin embargo, puede eliminar su efecto secundario (su variable "base") usando una reducción. reduce(lambda a, b: urlparse.urljoin(a, b), es) Un mapa es list[n] - to -> list[n]A reducir eslist[n] - to -> a calculated value
Tenga en cuenta que con este método, cada fragmento debe tener una barra diagonal al final, sin una barra inclinada inicial (para indicar que se está uniendo un fragmento de ruta). Esto es más correcto / informativo, diciéndole quepath1/ es un fragmento de ruta de URI, y no la ruta completa /path1/o una desconocidapath1 , que podría ser cualquiera (y se trata como una ruta completa).
Si necesita agregar / a un fragmento que no lo tiene, puede hacer:
uri = uri if uri.endswith("/")else f"{uri}/"
Para obtener más información sobre la resolución de URI, Wikipedia tiene algunos buenos ejemplos.
actualizar
Solo se da cuenta de que Peter Perron comentó sobre reducir la respuesta de Shikhar, pero dejaré esto aquí para demostrar cómo se hace.
Respuestas:
Debe utilizar urlparse.urljoin :
Con Python 3 (donde urlparse se renombra a urllib.parse ) puede usarlo de la siguiente manera :
fuente
urljoin
con 3 o parámetros de modo o qué biblioteca recomiendan para esto?/
se "restablecerá" y devolverá el esquema + netloc + lasturl:urlparse.urljoin('http://www.a.com/b/c/d', '/e') => 'http://www.a.com/e'
urljoin('http://www.a.com/', '../../b/c.png')
el resultado es'http://www.a.com/../../b/c.png'
, pero nohttp://www.a.com/b/c.png
. Entonces, ¿hay algún método para conseguirlohttp://www.a.com/b/c.png
?Si su ruta relativa consta de varias partes, debe unirlas por separado, ya
urljoin
que reemplazaría la ruta relativa, no uniría. La forma más sencilla de hacerlo es usarposixpath
.Consulte también: Cómo unir componentes de una ruta cuando está construyendo una URL en Python
fuente
fuente
reduce(lambda a, b: urlparse.urljoin(a, b), es)
Un mapa eslist[n] - to -> list[n]
A reducir eslist[n] - to -> a calculated value
Sencillo.
fuente
Para Python 3.0+, la forma correcta de unir URL es:
fuente
Puedes usar
reduce
para lograr el método de Shikhar de una manera más limpia.Tenga en cuenta que con este método, cada fragmento debe tener una barra diagonal al final, sin una barra inclinada inicial (para indicar que se está uniendo un fragmento de ruta). Esto es más correcto / informativo, diciéndole que
path1/
es un fragmento de ruta de URI, y no la ruta completa/path1/
o una desconocidapath1
, que podría ser cualquiera (y se trata como una ruta completa).Si necesita agregar
/
a un fragmento que no lo tiene, puede hacer:Para obtener más información sobre la resolución de URI, Wikipedia tiene algunos buenos ejemplos.
actualizar
Solo se da cuenta de que Peter Perron comentó sobre reducir la respuesta de Shikhar, pero dejaré esto aquí para demostrar cómo se hace.
fuente