литье сырых строк питона - PullRequest
32 голосов
/ 11 марта 2010

Учитывая переменную, которая содержит строку, есть ли быстрый способ преобразовать ее в другую необработанную строковую переменную?

Следующий код должен проиллюстрировать, что я ищу:

line1 = "hurr..\n..durr"
line2 = r"hurr..\n..durr"

print(line1 == line2)  # outputs False
print(("%r"%line1)[1:-1] == line2)  # outputs True

Самым близким, что я обнаружил, является флаг форматирования %r, который, кажется, возвращает необработанную строку, хотя и внутри одинарных кавычек. Есть ли какой-нибудь более простой способ сделать это?

Ответы [ 3 ]

62 голосов
/ 11 марта 2010

Python 3:

"hurr..\n..durr".encode('unicode-escape').decode()

Python 2:

"hurr..\n..durr".encode('string-escape')
1 голос
/ 12 декабря 2014

Выше было показано, как кодировать.

'hurr..\n..durr'.encode('string-escape')

Этот способ будет декодировать.

r'hurr..\n..durr'.decode('string-escape')

Ex.

In [12]: print 'hurr..\n..durr'.encode('string-escape')
hurr..\n..durr

In [13]: print r'hurr..\n..durr'.decode('string-escape')
hurr..
..durr

Это позволяет "приводить / трансформировать необработанные строки" в обоих направлениях. Практический случай, когда json содержит необработанную строку, и я хочу ее красиво напечатать.

{
    "Description": "Some lengthy description.\nParagraph 2.\nParagraph 3.",
    ...
}

Я бы сделал что-то подобное.

print json.dumps(json_dict, indent=4).decode('string-escape')
1 голос
/ 11 марта 2010

Еще один способ:

>>> s = "hurr..\n..durr"
>>> print repr(s).strip("'")
hurr..\n..durr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...