Python中的反repr函数是什么?

22

如果我有一个包含字符(0x61 0x62 0xD)的字符串,那么该字符串的repr函数将返回'ab\r'

是否有逆向操作的方法:如果我有一个字符串'ab\r'(包含字符0x61 0x62 0x5C 0x72),我需要得到字符串0x61 0x62 0xD


你可以使用 hexord,但 '\r' 不是两个字符。而且,'\r'0xd,而不是 0x13 - jonrsharpe
1
我使用repr(将\r转换为两个字符),因为我需要查看所有特殊字符,并且我需要一个与repr相反的函数,因为我需要以\ch的形式输入特殊字符。 是的,当然是0xD,对不起我的错误。 - Ivan Borshchov
如果我在程序中写入 str="ab\r",那么它并不是两个字符,但是当我从GUI界面读取时,它就变成了两个字符。 - Ivan Borshchov
1个回答

37

我认为你需要的是 ast.literal_eval

>>> s = repr("ab\r")
>>> s
"'ab\\r'"
>>> from ast import literal_eval
>>> literal_eval(s)
'ab\r'

你的代码可以运行,但在我的情况下不行。我需要做以下操作:>>> s="ab\\r" >>> s 'ab\\r' >>> print(s) ab\r >>> literal_eval(s) Traceback (most recent call last): File "", line 1, in File "C:\Python27\lib\ast.py", line 49, in literal_eval node_or_string = parse(node_or_string, mode='eval') File "C:\Python27\lib\ast.py", line 37, in parse return compile(source, filename, mode, PyCF_ONLY_AST) File "", line 1 ab\r ^ SyntaxError: 行继续字符后出现意外字符 - Ivan Borshchov
1
@user3479125,你没有足够的引号 - 请注意,在我的示例中s中有两对引号(一个单引号,一个双引号:"'...'")。否则,literal_eval无法将其评估为字符串。 - jonrsharpe
为什么不直接使用eval - SeF
1
@SeF 请看这里:使用Python的eval()和ast.literal_eval() - tedx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接