Pergunta

Dado um caminho como "mydir/myfile.txt", como encontro o caminho absoluto do arquivo em relação ao diretório de trabalho atual em Python?Por exemplo.no Windows, posso acabar com:

"C:/example/cwd/mydir/myfile.txt"
Foi útil?

Solução

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Também funciona se já for um caminho absoluto:

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Outras dicas

Você poderia usar a nova biblioteca Python 3.4 pathlib.(Você também pode obtê-lo para Python 2.6 ou 2.7 usando pip install pathlib.) Os autores escreveu:"O objetivo desta biblioteca é fornecer uma hierarquia simples de classes para lidar com caminhos de sistemas de arquivos e as operações comuns que os usuários realizam sobre eles."

Para obter um caminho absoluto no Windows:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

Ou no UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Os documentos estão aqui: https://docs.python.org/3/library/pathlib.html

>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>> 

Melhor ainda, instale o módulo (encontrado em PyPI), envolve todos os os.path funções e outras funções relacionadas em métodos em um objeto que pode ser usado onde quer que strings sejam usadas:

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

Hoje você também pode usar o unipath pacote baseado em path.py: http://sluggo.scrapping.cc/python/unipath/

>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>

Eu recomendaria usar este pacote, pois ele oferece uma interface limpa para utilitários os.path comuns.

Atualização para Python 3.4+ pathlib isso realmente responde à pergunta:

from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

Se você precisar apenas de uma string temporária, lembre-se de que você pode usar Path objetos com todas as funções relevantes em os.path, incluindo, é claro abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Observe que expanduser é necessário (no Unix) caso a expressão fornecida para o nome e localização do arquivo (ou diretório) possa conter um início ~/(o til refere-se ao diretório inicial do usuário) e expandvars cuida de quaisquer outras variáveis ​​de ambiente (como $HOME).

Eu prefiro usar glob

aqui está como listar todos os tipos de arquivo em sua pasta atual:

import glob
for x in glob.glob():
    print(x)

aqui está como listar todos (por exemplo) arquivos .txt em sua pasta atual:

import glob
for x in glob.glob('*.txt'):
    print(x)

aqui está como listar todos os tipos de arquivo em um diretório escolhido:

import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

espero que isso tenha ajudado você

Módulo os fornece uma maneira de encontrar o caminho do abdômen.

MAS a maioria dos caminhos no Linux começa com ~ (til), o que não dá um resultado satisfatório.

então você pode usar srblib por isso.

>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'

instale-o usando python3 -m pip install srblib

https://pypi.org/project/srblib/

se você estiver em um Mac

import os
upload_folder = os.path.abspath("static/img/users")

isso lhe dará um caminho completo:

print(upload_folder)

mostrará o seguinte caminho:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

Caso alguém esteja usando python e linux e procurando o caminho completo para o arquivo:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

Esse sempre obtém o nome de arquivo correto do script atual, mesmo quando é chamado de outro script.É especialmente útil ao usar subprocess.

import sys,os

filename = sys.argv[0]

a partir daí, você pode obter o caminho completo do script com:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

Também torna mais fácil navegar pelas pastas apenas anexando /.. quantas vezes quiser subir na hierarquia dos diretórios.

Para obter o cwd:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

Para o caminho pai:

>>> os.path.abspath(filename+"/../..")
'/foo'

Combinando "/.." com outros nomes de arquivo, você pode acessar qualquer arquivo no sistema.

filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top