Это пути к файлам.Посмотрите на os.path.normpath :
>>> import os
>>> os.path.normpath('/foo/bar/../../some/url')
'/some/url'
РЕДАКТИРОВАТЬ:
Если это в Windows, ваш путь ввода будет использовать обратную косую черту вместокосых черт.В этом случае вам по-прежнему нужно os.path.normpath
, чтобы избавиться от шаблонов ..
(и //
и /./
и всего остального, что является избыточным), а затем преобразовать обратные слэши в прямые косые черты:
def fix_path_for_URL(path):
result = os.path.normpath(path)
if os.sep == '\\':
result = result.replace('\\', '/')
return result
РЕДАКТИРОВАТЬ 2:
Если вы хотите нормализовать URL-адреса, сделайте это (до того, как вы удалите метод и т.п.) с помощью модуля urlparse , как показано в1023 * ответ на этот вопрос .
РЕДАКТИРОВАТЬ 3:
Кажется, что urljoin
не нормализует базузаданный путь:
>>> import urlparse
>>> urlparse.urljoin('http://somedomain.com/foo/bar/../../some/url', '')
'http://somedomain.com/foo/bar/../../some/url'
normpath
сам по себе тоже не совсем обрезает:
>>> import os
>>> os.path.normpath('http://somedomain.com/foo/bar/../../some/url')
'http:/somedomain.com/some/url'
Обратите внимание, что начальная двойная косая черта была съедена.
Итакмы должны заставить их объединить свои силы:
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)
Использование:
>>> fix_URL('http://somedomain.com/foo/bar/../../some/url')
'http://somedomain.com/some/url'