Я хочу использовать repr()
, чтобы получить строковый литерал в кодировке Python (который я могу вставить в какой-нибудь исходный код), но я бы предпочел строку в тройных кавычках с реальными символами новой строки, а не escape-последовательность \n
.
Я мог бы постобработать строку, чтобы преобразовать \n
обратно в символ новой строки и добавить еще пару кавычек, но тогда, если \\n
есть в исходном коде, я бы не хотел сопоставлять это.
Какой самый простой способ сделать это?
Пример ввода:
foo????
bar
Или как строку Python:
'foo????\nbar'
Желаемый результат:
'''foo\xf0\x9f\x92\xa9
bar'''
Тройные одинарные или тройные двойные кавычки — это нормально, но я хочу, чтобы они разбивались на несколько строк.
Что у меня есть до сих пор:
#!/usr/bin/env python
import sys
import re
with open(sys.argv[1], 'r+') as f:
data = f.read()
f.seek(0)
out = "''" + re.sub(r"\\n", '\n', repr(data)) + "''"
f.write(out)
f.truncate()
Я все еще пытаюсь понять регулярное выражение, чтобы избежать преобразования экранированных \n
.
Цель состоит в том, что если я вставлю это обратно в исходный файл Python, я получу точно то же самое, что я прочитал.
Я использую Python 2.7.14.
print(your_string)
? Я действительно не получаю желаемого ввода и вывода. - person wim   schedule 29.03.2019repr
будет экранировать кавычки, смайлики и другие управляющие символы, которые мне нужны. - person mpen   schedule 29.03.2019'foo????\nbar'
, а неu'foo????\nbar'
? Правильным выходом здесь будетfoo\U0001f4a9\nbar
- то, что вы здесь показываете, закодировано в кодировке utf-8. - person wim   schedule 29.03.2019