Escape-строка для корректного выражения Python
Мой вопрос прост. Предположим, у вас есть строка в Python, как это Foo '" \ Bar
,
Как правильно преобразовать его в правильное выражение Python, как 'Foo \'" \\ Bar'
(так что вы просто можете скопировать и вставить его в интерпретатор Python, и он будет работать)?
Я думал о '"{}"'.format(some replace magic)
, но должно быть лучшее решение.
2 ответа
Вы можете использовать unicode_escape
кодек; это производит bytes
пример:
>>> example = 'Foo \'" \\ Bar'
>>> print(example)
Foo '" \ Bar
>>> print(example.encode('unicode_escape'))
b'Foo \'" \\\\ Bar'
>>> example.encode('unicode_escape')
b'Foo \'" \\\\ Bar'
unicode_escape
явно создает допустимые строковые литералы Python:
Создайте строку, которая подходит как литерал Unicode в исходном коде Python
Чтобы вернуться к Unicode, просто декодируйте из ASCII:
>>> print(example.encode('unicode_escape').decode('ascii'))
Foo '" \\ Bar
>>> example.encode('unicode_escape').decode('ascii')
'Foo \'" \\\\ Bar'
В качестве альтернативы используйте repr()
:
>>> repr(example)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(example))
'Foo \'" \\ Bar'
Вернуть строку, содержащую печатаемое представление объекта. Для многих типов эта функция пытается вернуть строку, которая выдаст объект с тем же значением при передаче
eval()
в противном случае представление представляет собой строку, заключенную в угловые скобки, которая содержит название типа объекта вместе с дополнительной информацией, часто содержащей имя и адрес объекта.
Выход из repr()
строки можно вставить прямо обратно в интерпретатор Python без дополнительного форматирования.
Обратите внимание, что repr()
а также unicode_escape
только кавычки, когда это абсолютно необходимо. Только когда оба стиля цитирования, одиночный и двойной, присутствуют, один из них экранируется:
>>> print(repr('\''))
"'"
>>> print(repr('\"'))
'"'
>>> print(repr('\'"'))
'\'"'
Это именно то, что repr
предназначен для:
>>> x = '''Foo '" \ Bar'''
>>> repr(x)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(x))
'Foo \'" \\ Bar'