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!


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.


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)

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.


-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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.