Dado um caminho como "mydir/myfile.txt"
, como encontro o caminho absoluto do arquivo em relação ao diretório de trabalho atual no Python? Por exemplo, no Windows, posso acabar com:
"C:/example/cwd/mydir/myfile.txt"
Dado um caminho como "mydir/myfile.txt"
, como encontro o caminho absoluto do arquivo em relação ao diretório de trabalho atual no Python? Por exemplo, no Windows, posso acabar com:
"C:/example/cwd/mydir/myfile.txt"
Respostas:
Também funciona se já for um caminho absoluto:
fonte
normpath()
da seguinte forma:normpath(join(os.getcwd(), path))
. Portanto, semydir/myfile.txt
não o fizeros.getcwd()
, o caminho absoluto não será o caminho real .mydir/myfile.txt
refere-se implicitamente a um caminho dentro do diretório de trabalho atual, pois é equivalente a./mydir/myfile.txt
. Esse pode não ser o caminho que você pretendia inserir, mas parece que a interpretação correta do caminho, até onde eu sei. Você poderia elaborar?abspath
função e um arquivo real. Você pode fornecer arquivos de nome de caminho inexistentes e as hierarquias de diretório são boas e o abspath simplesmente resolverá os bits do caminho (incluindo o..
elemento " " do diretório pai ) e retornará uma string. Esta é apenas uma string calculada a partir do diretório atual; qualquer correlação com um arquivo real é acidental, ao que parece. Tenteos.path.abspath("/wow/junk/../blha/hooey")
. Funciona.os.path.exists
. Pelo contrário, sistemas como o PowerShell que insistem no caminho existente com a função de resolução de caminho padrão são uma tarefa difícil de usar.relpath
path
relpath
Você pode usar a nova biblioteca Python 3.4
pathlib
. (Você também pode obtê-lo para Python 2.6 ou 2.7 usandopip install pathlib
.) Os autores escreveram : "O objetivo desta biblioteca é fornecer uma hierarquia simples de classes para manipular os caminhos do sistema de arquivos e as operações comuns que os usuários fazem sobre eles".Para obter um caminho absoluto no Windows:
Ou no UNIX:
Os documentos estão aqui: https://docs.python.org/3/library/pathlib.html
fonte
os.path.abspath()
me deu um erro :,AttributeError: 'NoneType' object has no attribute 'startswith'
usingPath().resolve()
does not com o mesmo caminho de arquivo relativo. (Linux e Python3.4)Melhor ainda, instale o módulo (encontrado em
PyPI
), ele agrupa todas asos.path
funções e outras funções relacionadas em métodos em um objeto que pode ser usado onde quer que as strings sejam usadas:fonte
pathlib
. Veja minha resposta neste tópico.from path import Path
seguidaPath('mydir/myfile.txt').abspath()
path
módulo diferente . O módulo vinculado usa uma classe chamadapath
.Hoje você também pode usar o
unipath
pacote baseado empath.py
: http://sluggo.scrapping.cc/python/unipath/Eu recomendaria usar este pacote, pois oferece uma interface limpa para os utilitários comuns do os.path .
fonte
Atualização para o Python 3.4+
pathlib
que realmente responde à pergunta:Se você precisar apenas de uma sequência temporária, lembre-se de que pode usar
Path
objetos com todas as funções relevantesos.path
, incluindo, é claroabspath
:fonte
Observe que
expanduser
é necessário (no Unix), caso a expressão fornecida para o nome e o local do arquivo (ou diretório) possa conter um líder~/
(o til refere-se ao diretório inicial do usuário) eexpandvars
cuida de quaisquer outras variáveis de ambiente (como$HOME
).fonte
Isso sempre obtém o nome do arquivo correto do script atual, mesmo quando é chamado de outro script. É especialmente útil ao usar
subprocess
.a partir daí, você pode obter o caminho completo do script com:
Também facilita a navegação nas pastas, anexando
/..
quantas vezes você quiser subir na hierarquia dos diretórios.Para obter o cwd:
Para o caminho pai:
Ao combinar
"/.."
com outros nomes de arquivos, você pode acessar qualquer arquivo no sistema.fonte
O módulo
os
fornece uma maneira de encontrar o caminho do abs.MAS a maioria dos caminhos no Linux começa com
~
(til), o que não fornece um resultado satisfatório.então você pode usar
srblib
para isso.instale-o usando
python3 -m pip install srblib
https://pypi.org/project/srblib/
fonte
Eu prefiro usar glob
Aqui está como listar todos os tipos de arquivos na sua pasta atual:
Aqui está como listar todos os arquivos .txt (por exemplo) na sua pasta atual:
Aqui está como listar todos os tipos de arquivo em um diretório escolhido:
espero que isso tenha ajudado
fonte
os.path.abspath()
) para qualquer caminho relativoglob
fornece para seus dois primeiros casos ...se você estiver em um mac
isso lhe dará um caminho completo:
mostrará o seguinte caminho:
fonte
Caso alguém esteja usando python e linux e procurando o caminho completo para o arquivo:
fonte