Python, adicione a barra final à string do diretório, os independentemente

114

Como posso adicionar uma barra final ( /para * nix, \para win32) a uma string de diretório, se a barra final ainda não estiver lá? Obrigado!

Oh Ho
fonte
8
Você deve usar o os.pathmódulo ( docs.python.org/library/os.path.html ) em vez de manipular strings diretamente. Use os.path.joinpara concatenar componentes de caminho.
Kennytm
2
obrigado Tim por lembrar, depois de ler o documento, acho que a resposta para minha verdadeira pergunta é os.path.join (pasta, nome do arquivo) e não preciso me preocupar com a barra. cara, eu vou adorar python ;-)
ohho
2
É por isso que perguntei - não faça isso sozinho, use os.path.joine deixe a biblioteca padrão descobrir o separador de caminho correto.
Tim Pietzcker,
2
@ S.Lott Não vou considerar isso 'ruim'. a pergunta é uma pergunta válida por si só. é apenas uma parte de uma questão maior (pode-se dizer real).
ohho
6
Dependendo do que você está fazendo, no entanto, a pergunta ainda pode ser do seu interesse. Por exemplo, se estiver usando Python para fornecer entrada para outro programa, você pode ter um caso em que um argumento precisa de um caminho de barra. Isso pode estar fora de seu controle; e é um caso de uso perfeitamente válido para a resposta de Marco abaixo.
Chris Krycho

Respostas:

180

os.path.join(path, '') adicionará a barra final se ainda não estiver lá.

Você pode fazer os.path.join(path, '', '')ou os.path.join(path_with_a_trailing_slash, '')e ainda obterá apenas uma barra final.

Steven T. Snyder
fonte
2
Também adiciona uma barra quando pathpassa a ser um arquivo em vez de um diretório. Isso é um pouco inconveniente.
Martin
27

Já que você deseja conectar um diretório e um nome de arquivo, use

os.path.join(directory, filename)

Se você quiser se livrar de .\..\..\blah\caminhos, use

os.path.join(os.path.normpath(directory), filename)
Tim Pietzcker
fonte
11

Você pode fazer isso manualmente:

path = ...

import os
if not path.endswith(os.path.sep):
    path += os.path.sep

No entanto, geralmente é muito mais limpo de usar os.path.join.

Max Shawabkeh
fonte
-1

Você poderia usar algo assim:

os.path.normcase(path)
    Normalize the case of a pathname. On Unix and Mac OS X, this returns the path unchanged; on case-insensitive filesystems, it converts the path to lowercase. On Windows, it also converts forward slashes to backward slashes.

Caso contrário, você pode procurar outra coisa nesta página

Bloeper
fonte