#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. Запуск без него относится к текущему рабочему каталогу. Большое спасибо.