2
respostas

Dúvida sobre a validação de string com caracteres especiais.

Fala galera! Então, minha dúvida é meio básica e até tentei encontrar uma resposta que pudesse me auxiliar nesta situação e de fato encontrei, mas gostaria de saber se há alguma outra maneira conhecida pelos especialistas e entendedores da linguagem que aqui habitam para validar caracteres especiais em uma string, por exemplo:

Eu tenho de fazer uma busca de arquivos num servidor, desktop ou o que quer que seja, e o destino do arquivo seria algo por exemplo:

C:\root\raw_01\naveg.cfg

Mas a leitura e retorno, seria literalmente:

aw_01
aveg.cfg

A leitura do Python iria identificar os caracteres especiais: \n, \r assim causando um problemão ao tentar fazer a leitura do respectivo arquivo. A maneira que encontrei foi de adicionar mais uma barra inversa manualmente antecedendo cada uma das que já existem, mas, existe alguma outra forma de formatarmos como por exemplo com métodos auxiliares tipo strip() ou replace(), já que o próprio Python não aceita também o uso de barras inversas seguidas de aspas ("\ ") no caso de tentar utilizar o método replace?

Valeu pela atenção! Aguardo retorno :)

2 respostas

Boa tarde, acho que sua pergunta não é básica, pelo contrário é muito interessante sim. Considerando que python é utilizado em vários processos automatizados. Problemas como esse deve ser bem comum.

Eu lembro que eu já tinha visto uma solução para esse seu problema, mas não estava me lembrando como resolver. Checando a documentação não cheguei exatamente na resposta, mas me lembrei como resolver. Segue minha sugestção:

""" Considerando já string da url do arquivo"""

url = "C:\root\raw_01\naveg.cfg"

#Você pode fazer a leitura dessa string sem interferência dos caracteres especiais transformando a string para condificação ascii.

url.enconde('ascii')

# a saída será:
b'C:\root\raw_01\naveg.cfg'

Testa aí na sua máquina e fala pra gente se atende suas expectativas.

Espero ter ajudado. Bons estudos

Grande Maercio, meu conterrâneo, muito obrigado pelo retorno! Camarada, executei a possível solução mas ainda não obtive o resultado que procuro, porém já foi de grande valia pois de fato funcionou com pequenas alterações que acabei fazendo. Utilizando o código como sugerido e o seguinte código, obtive o mesmo resultado:

url = 'C:\root\raw_01\naveg.cfg'.encode('ASCII')

O qual o valor resultou em:

b'C:\root\raw_01\naveg.cfg'

Veja que me retorna um 'b' antecedendo a string para nos alertar que o valor é pertencente à classe 'bytes'. Ou seja, o encode() transforma nosso valor de string em um bytecode:

url = 'C:\root\raw_01\naveg.cfg'.encode('ASCII')
print(url[0])

Ele nos retornará um '67'. Que seria a referência do nosso 'C' no retorno codificado pelo encode(). Ainda utilizando a mesma maneira, só consegui passar a extrair dados da string em variáveis após criar uma string a partir de:

url = 'C:\root\raw_01\naveg.cfg'.encode('ASCII')
nova_url = str(url)
nova_url = nova_url[1:]  # Para retirar o nosso 'b' que ainda restara no resultado.

Daí em diante teremos ainda as aspas presentes na string da nova variável para formatar, mas de qualquer maneira, já é muito mais fácil partir deste ponto inicial. Sua resposta foi muito proveitosa, espero ter agregado à ela também.

Valeu meu caro! Bons estudos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software