gpt4 book ai didi

Python repr 字符串带真正的换行符

转载 作者:行者123 更新时间:2023-12-01 01:05:25 29 4
gpt4 key购买 nike

我想使用 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()

我仍在尝试找出正则表达式以避免转换转义的 \n

目标是,如果我将其粘贴回 Python 源文件中,我将得到与读入的内容完全相同的内容。

<小时/>

我使用的是 Python 2.7.14

最佳答案

如何splitlines它并分别编码每一行:

s = 'foo💩\nbar'

r = "'''" + '\n'.join(repr(x)[1:-1] for x in s.splitlines()) + "'''"

assert eval(r) == s

如果您使用的是 python2 并且输入是 unicode,则 repr[2:-1] 也可以删除前导 u。这同样适用于 py3 和字节输入。

关于Python repr 字符串带真正的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com