я могу сделать
>>> os.path.join("c:/","home","foo","bar","some.txt")
'c:/home\\foo\\bar\\some.txt'
Но когда я сделаю
>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(s)
['c:/', 'home', 'foo', 'bar', 'some.txt']
Что мне здесь не хватает?
python
python-2.7
os.path
АТОзТОА
источник
источник
/Users/...
. Чтобы решить эту проблему, я добавил эту ведущую косую черту вручную на случай, если кто-тоПредполагая, что
join
это не было разработано таким образом (как указано в ATOzTOA), и для этого требовалось только два параметра, вы все равно могли бы использовать встроенныйreduce
:>>> reduce(os.path.join,["c:/","home","foo","bar","some.txt"]) 'c:/home\\foo\\bar\\some.txt'
Такой же результат, как:
>>> os.path.join(*["c:/","home","foo","bar","some.txt"]) 'c:/home\\foo\\bar\\some.txt'
Просто для полноты и образовательных целей (и для других ситуаций, когда
*
не работает).Подсказка для Python 3
reduce
был перенесен вfunctools
модуль.источник
reduce
был перемещен вfunctools
модуль на случай, если кто-то еще искал его, как и я.reduce
к модулю - это заявление.from functools import reduce
Я наткнулся на ситуацию, когда список может быть пуст. В таком случае:
os.path.join('', *the_list_with_path_components)
Обратите внимание на первый аргумент, который не повлияет на результат.
источник
Это просто метод. Вы ничего не упускаете. В официальной документации показывает , что вы можете использовать список распаковки , чтобы поставить несколько путей:
s = "c:/,home,foo,bar,some.txt".split(",") os.path.join(*s)
Обратите внимание на
*s
значение только чтоs
вos.path.join(*s)
. Использование звездочки вызовет распаковку списка, что означает, что каждый аргумент списка будет передан функции как отдельный аргумент.источник
Это также можно рассматривать как простую операцию уменьшения карты, если вы хотите думать об этом с точки зрения функционального программирования.
import os folders = [("home",".vim"),("home","zathura")] [reduce(lambda x,y: os.path.join(x,y), each, "") for each in folders]
reduce
встроен в Python 2.x. В Python 3.x он был перемещен вitertools
Однако принятый ответ лучше.На этот вопрос был дан ответ ниже, но ответим, есть ли у вас список элементов, которые необходимо объединить.
источник