Python-从文件打印十六进制

Python-从文件打印十六进制,python,file,printing,hex,Python,File,Printing,Hex,我有以下代码: code1 = ("\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1") print code1 code2 = open("code.txt", 'rb').read() print code2 代码1输出: �צ�t$פ_)�½i�»± 代码2输出: "\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1" 我需要从文件中读取的代

我有以下代码:

code1 = ("\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1")
print code1

code2 = open("code.txt", 'rb').read()
print code2
代码1输出:

�צ�t$פ_)�½i�»±
代码2输出:

"\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"
我需要从文件中读取的代码2与代码1具有相同的输出。 如何解决此问题?

此示例:

import binascii

code1 = "\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"
code2 = "\\xd9\\xf6\\xd9\\x74\\x24\\xf4\\x5f\\x29\\xc9\\xbd\\x69\\xd1\\xbb\\x18\\xb1"

print code1 == binascii.unhexlify(code2.replace('\\x', ''))
这是真的

可以使用binascii.unhexlify将十六进制文本表示形式转换为二进制,但首先必须从字符串中删除\x

编辑:我刚刚意识到双引号是输出的一部分。本质上,您只需要传递有效的十六进制字符串,所以其他所有内容都需要剥离。在您的情况下,您需要将代码2.replace'\\x',.strip''传递给unexlify。您可以使用EVE,并且可能会使用,但是考虑到这以后的选择。

< P>这个例子:

import binascii

code1 = "\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"
code2 = "\\xd9\\xf6\\xd9\\x74\\x24\\xf4\\x5f\\x29\\xc9\\xbd\\x69\\xd1\\xbb\\x18\\xb1"

print code1 == binascii.unhexlify(code2.replace('\\x', ''))
这是真的

可以使用binascii.unhexlify将十六进制文本表示形式转换为二进制,但首先必须从字符串中删除\x


编辑:我刚刚意识到双引号是输出的一部分。本质上,您只需要传递有效的十六进制字符串,所以其他所有内容都需要剥离。在您的情况下,您需要将代码2.replace'\\x',.strip''传递给unexlify。你可以使用EVE,也可能会使用,但是考虑一下以后的选择。

P>PrimeValueDe2应该做这项工作。< /P> < P>打印EVALCODE2应该做这项工作。< /P> < P>解释一个字符序列,如< /P>
In [125]: list(code2[:8])
Out[125]: ['\\', 'x', 'd', '9', '\\', 'x', 'f', '6']
与Python一样,Python将使用带有转义字符的字符串,例如

In [132]: list('\xd9\xf6')
Out[132]: ['\xd9', '\xf6']
使用.解码'string_escape':

在Python3中,字符串_escape编解码器已被删除,因此等效的

import codecs
codecs.escape_decode(code2)[0]

解释一系列字符,如

In [125]: list(code2[:8])
Out[125]: ['\\', 'x', 'd', '9', '\\', 'x', 'f', '6']
与Python一样,Python将使用带有转义字符的字符串,例如

In [132]: list('\xd9\xf6')
Out[132]: ['\xd9', '\xf6']
使用.解码'string_escape':

在Python3中,字符串_escape编解码器已被删除,因此等效的

import codecs
codecs.escape_decode(code2)[0]

你在code.txt里有什么?像这样的字符串:\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1或此字符串表示的字节?我的文本文件中有\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\xb1\xbb\x18\xb1。当我把它放在a变量中并打印它时,它会以二进制数据的形式输出,这正是我所需要的,但是当我从文件中读取它并将其打印为字符串时,sys.getdefaultencoding?@Shai-那么你的解决方案是:好的,我刚刚意识到,引号是输出的一部分,所以你只需要把它们去掉。你在code.txt里有什么?像这样的字符串:\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1或此字符串表示的字节?我的文本文件中有\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\xb1\xbb\x18\xb1。当我把它放在a变量中并打印它时,它会以二进制数据的形式输出,这正是我所需要的,但是当我从文件中读取它并将其打印为字符串时,sys.getdefaultencoding?@Shai-那么你的解决方案是:好的,我刚刚意识到,引号是输出的一部分,所以你只需要把它们脱掉。小心邪恶的评估。。。这个技巧对于学习/调试来说已经足够好了,但是不应该应用于生产逻辑。我认为作为最短的解决方案,这个技巧应该是最优雅的,但是人民的声音反对。也许我应该在正则表达式匹配之前声明code.txt确实包含Python字符串文字。。。这个技巧对于学习/调试来说已经足够好了,但是不应该应用于生产逻辑。我认为作为最短的解决方案,这个技巧应该是最优雅的,但是人民的声音反对。也许我应该在一个正则表达式匹配之前声明code.txt确实包含Python字符串literal.string\u escape。。。这太好了!字符串\u转义。。。这太好了!