如何在Python中读取解释的数据字符串?

如何在Python中读取解释的数据字符串?,python,hex,byte,Python,Hex,Byte,我想从Python文件中读取所有字符串。示例文件(/tmp/s.py): 现在,我尝试从脚本中读取字符串: import re find_str = re.compile(r"'(.+?)'") for line in open('/tmp/s.py', 'r'): all_strings = find_str.findall(line) print(all_strings) # outputs ['{\\x7f5 x'] 但是我希望字符串(在本例中是转义十六进制表示的字节

我想从Python文件中读取所有字符串。示例文件(/tmp/s.py):

现在,我尝试从脚本中读取字符串:

import re
find_str = re.compile(r"'(.+?)'")

for line in open('/tmp/s.py', 'r'):
    all_strings = find_str.findall(line)
    print(all_strings) # outputs ['{\\x7f5  x']
但是我希望字符串(在本例中是转义十六进制表示的字节)不被转义。我想处理/tmp/s.py文件中的数据,并获取一个带有解释的\x7f字节的字符串,而不是现在表示为\\x7f的文本\x7f


如何实现这一点?

您可以使用
unicode\u escape
编解码器对字符串进行解码,就像Python读取字符串文字时所做的那样:

print(*[s.encode('latin1').decode('unicode_escape') for s in all_strings])
请注意,
unicode\u escape
只能从字节解码,不能从文本解码。编解码器也仅限于拉丁语-1源代码,而不是默认的UTF-8

从Python
编解码器
模块的

unicode\u转义

在ASCII编码的Python源代码中,适合作为Unicode文本的内容进行编码,但引号不会转义。从拉丁语1的源代码解码。请注意,Python源代码实际上默认使用UTF-8

演示:


这是一个非常好的答案,并且完全回答了我试图阐述的问题。非常感谢。当Python源代码默认为utf8时,你知道为什么Python开发人员更喜欢拉丁文1而不是utf8吗?@NikolaiTschacher:我怀疑这是一个历史性的限制;Python2源代码传统上也被解释为拉丁语-1。此外,拉丁语-1表示将字节一对一解码为Unicode码点,这在处理任意字符串时可能是一个更好的选择(您始终可以将所有字节解码为Unicode码点,即使它是错误的)。您不能在此处指定源编码,因为您已经选择了
unicode\u escape
编解码器。
print(*[s.encode('latin1').decode('unicode_escape') for s in all_strings])
>>> s = r'{\x7f5  x'
>>> s
'{\\x7f5  x'
>>> s.encode('latin1').decode('unicode_escape')
'{\x7f5  x'