os.path.join дает некорректный вывод в некоторых случаях - PullRequest
0 голосов
/ 19 марта 2019

Я хочу объединить два пути, используя функцию os.path.join ().Пути, которые я хочу объединить: '/Users/Tushar/Desktop/' и '/Exp'.

Я делал - os.path.join('/Users/Tushar/Desktop','/Exp') и

  • Ожидаемый результат был- '/Users/Tushar/Desktop/Exp'

  • Но я действительно получил - '/Exp'

Почему я получаю этот вывод?

Этовывод выводится на все системы, macOS, Windows, Linux

Я пробовал -

  1. os.path.join('/Users/Tushar/Desktop','Exp'), и я получил правильныйто есть '/Users/Tushar/Desktop/Exp'

  2. os.path.join('/Users/Tushar/Desktop/','Exp'), и я снова получил правильный вывод, т.е. '/Users/Tushar/Desktop/Exp'

  3. os.path.join('/Users/Tushar/Desktop','/Exp','/123') дает '/123', но я ожидал '/Users/Tushar/Desktop/Exp/123'

  4. Видимо os.path.join('/Users/Tushar/Desktop/,'\\Exp') дает правильный вывод, т.е. '/Users/Tushar/Desktop/\\Exp', где какos.path.join('/Users/Tushar/Desktop/','/Exp') дает неправильный вывод '/Exp'.

До сих пор я дошел до того, что это как-то связано с косой чертой (/) в конце / Exp, что является причиной неправильного вывода.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

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

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

Вам потребуется вручную удалить все начальные косые черты во всех компонентах, кроме первого:

def my_join(root, *args):
    args = [arg.lstrip(os.path.sep) for arg in args]
    return os.path.join(root, *args)

См. Пример:

>>> my_join('/home/ibug', '/oh', '/yeah', '/handsome')
'/home/ibug/oh/yeah/handsome'
0 голосов
/ 19 марта 2019

это поведение точно так же, как задокументировано

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

...