¿Cómo escribir literales de cadena en Python sin tener que escapar de ellos?

97

¿Hay alguna manera de declarar una variable de cadena en Python de modo que todo dentro de ella se escape automáticamente o tenga su valor de carácter literal?

Estoy no preguntar cómo escapar de las comillas con barras, eso es obvio. Lo que estoy pidiendo es una forma de propósito general para hacer que todo en una cadena sea literal para que no tenga que pasar manualmente y escapar de todo para cadenas muy grandes. ¿Alguien sabe de una solución? ¡Gracias!

kjakeb
fuente

Respuestas:

125

Literales de cadena sin formato:

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

Si está tratando con cadenas muy grandes, específicamente cadenas de varias líneas, tenga en cuenta la sintaxis de comillas triples :

a = r"""This is a multiline string
with more than one line
in the source code."""
Greg Hewgill
fuente
1
¿Esta construcción introduce caracteres de salto de línea? Es decir, ¿la variable acontendrá una cadena con dos caracteres de salto de línea?
MadPhysicist
7
@MadPhysicist: Sí, la cadena resultante contendrá dos líneas nuevas en el caso anterior.
Greg Hewgill
Entendido. Y si se usa un 'split ()' en esta cadena, ¿se dividirá en líneas por defecto?
MadPhysicist
1
@MadPhysicist El valor predeterminado para .split () es dividir por espacios en blanco, y las nuevas líneas son espacios en blanco.
Greg Hewgill
1
He usado esto antes y funciona bien. Dos cosas a tener en cuenta: se incluyen sangrías (espacios) en las otras líneas, lo cual es deseable; si la cadena larga termina sin "nada bueno, porque todo terminará con """" un error de sintaxis.
Nagev
9

No existe tal cosa. Parece que quieres algo como "aquí documentos" en Perl y los shells, pero Python no tiene eso.

El uso de cadenas sin procesar o cadenas de varias líneas solo significa que hay menos cosas de las que preocuparse. Si usa una cadena sin procesar, todavía tiene que trabajar con un terminal "\" y con cualquier solución de cadena tendrá que preocuparse por el cierre ", ',' '' o" "" si está incluido en sus datos .

Es decir, no hay forma de tener la cuerda

 '   ''' """  " \

almacenado correctamente en cualquier literal de cadena de Python sin escape interno de algún tipo.

Andrew Dalke
fuente
1

(Suponiendo que no es necesario que ingrese la cadena directamente desde el código Python)

para solucionar el problema que señaló Andrew Dalke, simplemente escriba la cadena literal en un archivo de texto y luego use esto;

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

print input_string

Esto imprimirá el texto literal de lo que sea que esté en el archivo de texto, incluso si lo está;

 '   ''' """   \

No es divertido ni óptimo, pero puede ser útil, especialmente si tiene 3 páginas de código que habrían necesitado escapar de los caracteres.

Jeff Hykin
fuente
-1

si la cadena es una variable, use el. método de reproducción en él:

>>> s = '\tgherkin\n'

>>> s
'\tgherkin\n'

>>> print(s)
    gherkin

>>> print(s.__repr__())
'\tgherkin\n'
marcado
fuente
¿No se considera eso de mal estilo?
shah.shah
que, pepinillos?
marcado
1
puede usar repr(s)en su lugar para un mejor estilo
xuiqzy