Как мне отменить экранирование строки с обратной косой чертой в python?
предположим, что у меня есть строка, которая является экранированной обратной косой чертой версией другой строки. Есть ли простой способ, в Python, чтобы отменить эскейп строки? Я мог бы, например, сделать:
>>> escaped_str = '"Hello,nworld!"'
>>> raw_str = eval(escaped_str)
>>> print raw_str
Hello,
world!
>>>
однако это включает в себя передачу (возможно, ненадежной) строки в eval (), что является риском для безопасности. Есть ли функция в стандартной lib, которая принимает строку и создает строку без каких-либо последствий для безопасности?
3 ответа:
можно использовать
ast.literal_eval
что безопасно:безопасно вычислить узел выражения или строку, содержащую Python выражение. Предоставленная строка или узел могут состоять только из после питона буквальном структур: строки, числа, кортежи, списки, предсказывает, логические, и никто. (Конец)
такой:
>>> import ast >>> escaped_str = '"Hello,\nworld!"' >>> print ast.literal_eval(escaped_str) Hello, world!
в python 3,
str
объекты не имеютdecode
метод, и вы должны использоватьbytes
"объект". Ответ кристофеда охватывает 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"