tag Como verificar se um caminho é um caminho absoluto ou um caminho relativo na forma de plataforma cruzada com o Python?




tag mp3 python (6)

O caminho absoluto do UNIX começa com '/', enquanto o Windows inicia com o alfabeto 'C:' ou '\'. O python tem uma função padrão para verificar se um caminho é absoluto ou relativo?


os.path.isabs retorna True se o caminho for absoluto, False se não for. A documentação diz que funciona no Windows (posso confirmar que funciona no Linux pessoalmente).

os.path.isabs(my_path)

Outra forma, se você não está no diretório de trabalho atual, meio sujo, mas funciona para mim.

import re
path = 'my/relative/path'
# path = '..my/relative/path'
# path = './my/relative/path'

pattern = r'([a-zA-Z0-9]|[.])+/'
is_ralative = bool(pattern)

O módulo os.path terá tudo o que você precisa.


E se o que você realmente quer é o caminho absoluto, não se incomode em verificar se está, é só pegar o abspath :

import os

print os.path.abspath('.')

import os.path

os.path.isabs('/home/user')
True

os.path.isabs('user')
False

Na verdade, acho que nenhuma das respostas acima abordou o problema real: caminhos entre plataformas. O que o os.path faz é carregar a versão dependente do SO da biblioteca 'path'. Portanto, a solução é carregar explicitamente a biblioteca de caminhos relevante (SO):

import ntpath
import posixpath

ntpath.isabs("Z:/a/b/c../../H/I/J.txt")
    True
posixpath.isabs("Z:/a/b/c../../H/I/J.txt")
    False




path