Esas son rutas de archivos. Mira os.path.normpath:
>>> import os
>>> os.path.normpath('/foo/bar/../../some/url')
'/some/url'
EDIT:
Si esto es en Windows, la ruta de entrada utiliza las barras invertidas en lugar de barras. En este caso, usted todavía necesita os.path.normpath
para deshacerse de los ..
patrones (y //
y /./
y todo lo que es redundante), a continuación, convertir las barras invertidas por barras:
def fix_path_for_URL(path):
result = os.path.normpath(path)
if os.sep == '\\':
result = result.replace('\\', '/')
return result
EDIT 2:
Si desea normalizar las URL, hágalo (antes de quitarle el método y demás) con el módulo urlparse, como se muestra en the answer to this question.
Datos 3:
Parece que urljoin
no normaliza la ruta de la base que se le da:
>>> import urlparse
>>> urlparse.urljoin('http://somedomain.com/foo/bar/../../some/url', '')
'http://somedomain.com/foo/bar/../../some/url'
normpath
por sí mismo no acaba de cortar, sea:
>>> import os
>>> os.path.normpath('http://somedomain.com/foo/bar/../../some/url')
'http:/somedomain.com/some/url'
Tenga en cuenta que se comió la doble barra inicial.
Así que tenemos que hacer que se unen sus fuerzas:
def fix_URL(urlstring):
parts = list(urlparse.urlparse(urlstring))
parts[2] = os.path.normpath(parts[2].replace('/', os.sep)).replace(os.sep, '/')
return urlparse.urlunparse(parts)
Uso:
>>> fix_URL('http://somedomain.com/foo/bar/../../some/url')
'http://somedomain.com/some/url'
URL o ruta del archivo? – delnan
URL. Los puse así porque afterwords los compilo para el nombre de dominio, el esquema, etc. ... –
Ver http://stackoverflow.com/questions/2131290/how-can-normalize-collapse-paths- or-urls-in-python-in-os-independent-way –