Я изучаю Python, и я заметил что-то странное с одним из моих сценариев. Проведя небольшое тестирование, я обнаружил, что проблема связана с этим поведением:
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
Проверяя документацию, это, по сути, дизайн функции:
os.path. join (путь1 [, путь2 [,... ]])
Объединяйте один или несколько компонентов пути интеллектуально. Если какой-либо компонент является абсолютным путем, все предыдущие компоненты (в Windows, включая предыдущую букву диска, если они есть), удаляются, а соединение продолжается....
Мой вопрос не почему мой script не удалось, а скорее, почему функция была разработана таким образом. Я имею в виду, по крайней мере, в Unix, a//b
- вполне приемлемый способ обозначить путь, если не элегантный. Почему функция была разработана таким образом? Есть ли способ сказать, если один или несколько элементов пути были отброшены, не проверяя каждую строку пути с помощью os.path.isabs()
?
Из любопытства я также проверил случай, когда компонент пути заканчивается символом os.sep
:
>>> os.path.join('a/','b')
'a/b'
Это работает как ожидалось.