【发布时间】:2019-08-19 20:10:22
【问题描述】:
我想使用 repr() 来获取 Python 编码的字符串文字(我可以将其粘贴到一些源代码中),但我更喜欢带有真正换行符的三引号字符串而不是 \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()
我仍在尝试找出正则表达式以避免转换转义的\ns。
目标是,如果我将其粘贴回 Python 源文件,我将得到与我读入的完全相同的内容。
我使用的是 Python 2.7.14
【问题讨论】:
-
不就是
print(your_string)吗?我真的没有得到你想要的输入和输出。 -
@wim No.
repr将转义引号、表情符号和其他控制字符,这是我想要的。 -
好的,请发布一个示例输入和输出。 Btw repr 不会在当前版本的 Python 中转义表情符号 - 也许你应该用 python-2.x 标记它?
-
@wim 已添加到问题中。
-
您确定要
'foo????\nbar'而不是u'foo????\nbar'?这里正确的转义是foo\U0001f4a9\nbar- 你在这里显示的是 utf-8 编码