Что делает os.path.join в python 2.7? - PullRequest
       35

Что делает os.path.join в python 2.7?

0 голосов
/ 01 января 2019

У меня есть следующая строка кода, которую я считаю неправильной:

path_dir = os.path.abspath(os.path.join(os.path.dirname(__file__)))

, где os.path.dirname(__file__) ищет скрипт.

Я понимаю, что os.path.abspath() дает вамабсолютный путь к файлу или каталогу, но os.path.join() объединяет две строки вместе, но для этого нам нужно иметь 2 пути.т.е. path_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))

Правильно ли я считаю, что приведенный выше код неверен и неработоспособен?

Ответы [ 2 ]

0 голосов
/ 01 января 2019

os.path.join (путь, * пути) Интеллектуальное объединение одного или нескольких компонентов пути.Возвращаемое значение - это конкатенация пути и любых членов * путей с ровно одним разделителем каталогов (os.sep), следующим за каждой непустой частью, кроме последней, что означает, что результат будет заканчиваться только разделителем, если последняя часть пуста,Если компонент является абсолютным путем, все предыдущие компоненты отбрасываются, и соединение продолжается из компонента абсолютного пути.

Документация Python 2.7

0 голосов
/ 01 января 2019

Вызов os.path.join() полностью избыточен и может быть безопасно удален.Вам это не нужно здесь.Это не технически неправильный или сломанный однако.

os.path.join() принимает произвольное количество аргументов (по крайней мере 1) для объединения, так что пока это техническиразрешено передавать только результат os.path.dirname(__file__), os.path.join() может возвращать только этот единственный вход.

Вероятно, это артефакт рефакторинга кода или полупонятного действия копирования и вставки, где больше аргументовс тех пор.

os.path.join() принимает один аргумент для случая, когда вы используете синтаксис *args для передачи дополнительных путей, но эти дополнительные пути пусты в зависимости от условий выполнения:

base = '....'
additional = ()
if some_condition:
    additional = ('additional', 'elements')
path = os.path.join(base, *additional)
...