Como escrever literais de string em python sem ter que escapar deles?

97

Existe uma maneira de declarar uma variável de string em python de forma que tudo dentro dela seja automaticamente escapado ou tenha seu valor de caractere literal?

Estou não perguntar como escapar das aspas com barras, isso é óbvio. O que estou pedindo é uma maneira de uso geral para tornar literal tudo em uma string, para que eu não precise percorrer manualmente e escapar de tudo para strings muito grandes. Alguém conhece uma solução? Obrigado!

kjakeb
fonte

Respostas:

125

Literais de string brutos:

>>> r'abc\dev\t'
'abc\\dev\\t'
SilentGhost
fonte
69

Se você estiver lidando com strings muito grandes, especificamente strings de várias linhas, esteja ciente da sintaxe de aspas triplas :

a = r"""This is a multiline string
with more than one line
in the source code."""
Greg Hewgill
fonte
1
Esta construção introduz caracteres de quebra de linha? Ou seja, a variável aconterá uma string com dois caracteres de quebra de linha?
MadPhysicist
7
@MadPhysicist: Sim, a string resultante conterá duas novas linhas no caso acima.
Greg Hewgill
Entendido. E se um 'split ()' for usado nesta string, ele será dividido por linhas por padrão?
MadPhysicist
1
@MadPhysicist O padrão para .split () é dividir por espaços em branco e as novas linhas são espaços em branco.
Greg Hewgill
1
Já usei isso antes e funciona bem. Duas coisas a serem observadas: recuo (espaços) nas outras linhas estão incluídos, o que é desejável; se a string longa terminar "sem bom, porque a coisa toda vai acabar com o """" que é um erro de sintaxe.
Nagev
9

Não existe tal coisa. Parece que você quer algo como "documentos aqui" em Perl e os shells, mas Python não tem isso.

Usar strings brutas ou strings multilinhas significa apenas que há menos coisas com que se preocupar. Se você usar uma string bruta, então você ainda terá que trabalhar em um terminal "\" e com qualquer solução de string você terá que se preocupar com o fechamento ", ',' '' ou" "" se estiver incluído em seus dados .

Ou seja, não há como ter a corda

 '   ''' """  " \

armazenado adequadamente em qualquer literal de string Python sem escape interno de algum tipo.

Andrew Dalke
fonte
1

(Supondo que você não seja obrigado a inserir a string diretamente no código Python)

para contornar o problema apontado por Andrew Dalke, basta digitar a string literal em um arquivo de texto e usá-la;

input_ = '/directory_of_text_file/your_text_file.txt' 
input_open   = open(input_,'r+')
input_string = input_open.read()

print input_string

Isso imprimirá o texto literal de tudo o que estiver no arquivo de texto, mesmo que esteja;

 '   ''' """   \

Não é divertido ou ideal, mas pode ser útil, especialmente se você tiver 3 páginas de código que precisariam de escape de caractere.

Jeff Hykin
fonte
-1

se string for uma variável, use o. método repr nele:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'
markling
fonte
Mas isso não é considerado um estilo ruim?
shah.shah
o que, pepininhos?
markling em
1
você pode usar em repr(s)vez disso para um estilo melhor
xuiqzy