我的问题很简单。让我们假设你在python中有这样的字符串Foo '" \ Bar
。
正确的方式将它转换为有效的python表达式是什么样的'Foo \'" \\ Bar'
(所以你只需将它复制并粘贴到python解释器即可会工作吗?
我想到了'"{}"'.format(some replace magic)
,但必须有更好的解决方案。
答案 0 :(得分:3)
您可以使用unicode_escape
codec;这会产生一个bytes
实例:
>>> example = 'Foo \'" \\ Bar'
>>> print(example)
Foo '" \ Bar
>>> print(example.encode('unicode_escape'))
b'Foo \'" \\\\ Bar'
>>> example.encode('unicode_escape')
b'Foo \'" \\\\ Bar'
unicode_escape
expliticly 生成有效的python字符串文字:
在Python源代码中生成一个适合作为Unicode文字的字符串
要返回Unicode,只需从ASCII解码:
>>> print(example.encode('unicode_escape').decode('ascii'))
Foo '" \\ Bar
>>> example.encode('unicode_escape').decode('ascii')
'Foo \'" \\\\ Bar'
或者,使用repr()
:
>>> repr(example)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(example))
'Foo \'" \\ Bar'
返回包含对象的可打印表示的字符串。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给
eval()
时会产生具有相同值的对象,否则表示形式是包含在尖括号中的字符串,其中包含类型的名称。对象以及通常包括对象的名称和地址的附加信息。
字符串的repr()
输出可以直接粘贴回Python解释器,无需额外的格式化。
请注意,repr()
和unicode_escape
仅在绝对必要时转义引号。只有当两种引用样式(单引号和双引号)都存在时才会转义其中一种:
>>> print(repr('\''))
"'"
>>> print(repr('\"'))
'"'
>>> print(repr('\'"'))
'\'"'
答案 1 :(得分:1)
这正是repr
的意图:
>>> x = '''Foo '" \ Bar'''
>>> repr(x)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(x))
'Foo \'" \\ Bar'