os.path.join кажется чувствительным к открывающей косой черте, почему?

#python #os.path #expanduser

#python #os.path #expanduser

Вопрос:

Добавление косой черты к документам в ОС.соединение дает разные результаты, когда я думаю, что этого не должно быть. Почему?

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

 import os
# Initialize output files and folders, following principle of separating code from data
homeDir = os.path.expanduser('~')
targetDir = os.path.join(homeDir, '/Documents/Jeopardy/output')
print(targetDir)
# produces /Documents/Jeopardy/output  which is not expected
targetDir = os.path.join(homeDir, 'Documents/Jeopardy/output')
print(targetDir)
# produces /home/max/Documents/Jeopardy/output  which is expected
 

Я ожидал, что оба объединения создадут
/home/max/Documents/Jeopardy/output
Но первый этого не сделал. Я не должен понимать документ join, но я не понимаю, почему я получаю разные результаты.
заранее спасибо

Ответ №1:

Из строки join() документа:

Если компонент является абсолютным путем, все предыдущие компоненты отбрасываются, и объединение продолжается с компонента абсолютного пути.

'/Documents/Jeopardy/output' это абсолютный путь, поэтому первая часть отбрасывается.

С точки зрения поведения, использование относительного, а не абсолютного пути, возможно, имеет больше смысла; нет смысла добавлять что-либо к абсолютному пути, поскольку он уже начинается с корня FS.

Комментарии:

1. Спасибо, просветление. Я прочитал документ перед публикацией и все еще не понял его. После прочтения вашего ответа я использовал isabs (‘path’), чтобы поиграть, и думаю, что теперь понимаю. Начиная с разделителя путей, в моем случае ‘/’, относится к корню, который содержит, среди прочего, папки Ubunto bin и home. Запуск без него относится к текущему рабочему каталогу. Большое спасибо.