escape - ¿Cómo puedo escapar de una cadena escapada de barra invertida en Python?
raw string python (3)
En Python 3, los objetos str
no tienen un método de decode
y tienes que usar un objeto bytes
. La respuesta de ChristopheD cubre python 2.
# create a `bytes` object from a `str`
my_str = "Hello,//nworld"
# (pick an encoding suitable for your str, e.g. ''latin1'')
my_bytes = my_str.encode("utf-8")
# or directly
my_bytes = b"Hello,//nworld"
print(my_bytes.decode("unicode_escape"))
# "Hello,
# world"
Supongamos que tengo una cadena que es una versión de escape-barra invertida de otra cadena. ¿Hay alguna manera fácil, en Python, de deshacer el escape de la cadena? Podría, por ejemplo, hacer:
>>> escaped_str = ''"Hello,//nworld!"''
>>> raw_str = eval(escaped_str)
>>> print raw_str
Hello,
world!
>>>
Sin embargo, eso implica pasar una cadena (posiblemente no confiable) a eval (), que es un riesgo de seguridad. ¿Hay una función en la lib estándar que toma una cadena y produce una cadena sin implicaciones de seguridad?
Puede usar ast.literal_eval
que es seguro:
Evaluar de forma segura un nodo de expresión o una cadena que contenga una expresión de Python. La cadena o nodo proporcionado solo puede consistir en las siguientes estructuras literales de Python: cadenas, números, tuplas, listas, dictados, booleanos y Ninguno. (FIN)
Me gusta esto:
>>> import ast
>>> escaped_str = ''"Hello,//nworld!"''
>>> print ast.literal_eval(escaped_str)
Hello,
world!
>>> print ''"Hello,//nworld!"''.decode(''string_escape'')
"Hello,
world!"