Почему os.normpath не сломает ведущий двойной слеш? - PullRequest
4 голосов
/ 19 октября 2011

В Unix os.path.normpath объединяет несколько косых черт в отдельные , за исключением случаев, когда появляются ровно две косые черты, которые являются началом пути . Почему исключение?

Для иллюстрации я получаю следующие преобразования:

//double/slash/stays -> //double/slash/stays
/double/slash//gone// -> /double/slash/gone/
double//slash//gone/ -> double/slash/gone
///triple/slash/gone -> /triple/slash/gone
////quad/slash/gone -> /quad/slash/gone

Это кажется странным для меня. Я могу смутно представить, что это полезно для монтирования SMB или URL-адресов, но я не думаю, что меня это волнует. Есть ли какая-то скрытая мудрость в поведении Python, или я должен просто свернуть ведущую // себя?

[обновление] Принимая во внимание ответ ниже, похоже, что лучше всего не свернуть //, а просто принять его или трактовать как ошибку.

1 Ответ

8 голосов
/ 19 октября 2011

Поскольку POSIX позволяет обрабатывать путь, начинающийся с двух слешей, в зависимости от реализации. Другими словами, // foo не обязательно означает то же самое, что / foo во всех системах POSIX.

С Стандарт IEEE 1003.1 :

Путь, начинающийся с двух последовательных слешей, может быть интерпретирован в определенной реализации, хотя более двух ведущих косые черты должны рассматриваться как одиночные косые черты.

См. Также этот отчет об ошибке (который был закрыт как недействительный).

...