eu posso fazer
>>> os.path.join("c:/","home","foo","bar","some.txt")
'c:/home\\foo\\bar\\some.txt'
Mas quando eu faço
>>> s = "c:/,home,foo,bar,some.txt".split(",")
>>> os.path.join(s)
['c:/', 'home', 'foo', 'bar', 'some.txt']
O que estou perdendo aqui?
python
python-2.7
os.path
ATOzTOA
fonte
fonte
/Users/...
. Para resolver, adicionei aquela barra inicial manualmente, caso alguém enfrente o mesmo problema ...Supondo que
join
não foi projetado dessa forma (o que é, como ATOzTOA apontou), e levou apenas dois parâmetros, você ainda pode usar o integradoreduce
:Mesma saída como:
Apenas por razões de exaustividade e educacional (e para outras situações onde
*
não funciona).Dica para Python 3
reduce
foi movido para ofunctools
módulo.fonte
reduce
foi movido para ofunctools
módulo, caso alguém mais estivesse procurando por ele como eu.reduce
para um módulo é uma declaração.from functools import reduce
Tropecei na situação em que a lista pode estar vazia. Nesse caso:
Observe o primeiro argumento, que não alterará o resultado.
fonte
É apenas o método. Você não está perdendo nada. A documentação oficial mostra que você pode usar a descompactação de lista para fornecer vários caminhos:
Observe o início
*s
de apenass
emos.path.join(*s)
. O uso do asterisco irá desencadear a descompactação da lista, o que significa que cada argumento da lista será fornecido para a função como um argumento separado.fonte
Isso também pode ser considerado uma operação simples de redução de mapa, se você quiser pensar nisso de uma perspectiva de programação funcional.
reduce
está embutido no Python 2.x. No Python 3.x, ele foi movido paraitertools
No entanto, a resposta aceita é melhor.Isso foi respondido abaixo, mas respondendo se você tiver uma lista de itens que precisam ser unidos.
fonte