Ответ 1
Python 3:
"hurr..\n..durr".encode('unicode-escape').decode()
Python 2:
"hurr..\n..durr".encode('string-escape')
Учитывая переменную, которая содержит строку, есть ли быстрый способ преобразовать ее в другую переменную?
Следующий код должен иллюстрировать то, что я после:
line1 = "hurr..\n..durr"
line2 = r"hurr..\n..durr"
print(line1 == line2) # outputs False
print(("%r"%line1)[1:-1] == line2) # outputs True
Самым близким, что я обнаружил, является флаг форматирования %r
который, кажется, возвращает необработанную строку, хотя и в одинарных кавычках. Есть ли более простой способ сделать это?
Python 3:
"hurr..\n..durr".encode('unicode-escape').decode()
Python 2:
"hurr..\n..durr".encode('string-escape')
Еще один способ:
>>> s = "hurr..\n..durr"
>>> print repr(s).strip("'")
hurr..\n..durr
Выше было показано, как кодировать.
'hurr..\n..durr'.encode('string-escape')
Этот способ будет декодироваться.
r'hurr..\n..durr'.decode('string-escape')
Исх.
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')
>>> v1 = 'aa\1.js'
>>> re.sub(r'(.*)\.js', repr(v1).strip("'"), 'my.js', 1)
'aa\\x01.js
Но
>>> re.sub(r'(.*)\.js', r'aa\1.js', 'my.js', 1)
'aamy.js'
и
>>> re.sub(r'(.*)\.js', raw(v1), 'my.js', 1)
'aamy.js'
И улучшенная реализация исходного кода
def raw(text):
"""Returns a raw string representation of text"""
return "".join([escape_dict.get(char,char) for char in text])