Python - 从文件中打印十六进制

时间:2011-07-20 20:40:07

标签: 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

code1输出:

�צ�t$פ_)�½i�»±

code2输出:

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

我需要code2(我从文件中读取)与code1具有相同的输出 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

解释一系列字符,例如

In [125]: list(code2[:8])
Out[125]: ['\\', 'x', 'd', '9', '\\', 'x', 'f', '6']

因为Python是带有转义字符的字符串,例如

In [132]: list('\xd9\xf6')
Out[132]: ['\xd9', '\xf6']

使用.decode('string_escape')

In [122]: code2.decode('string_escape')
Out[122]: '\xd9\xf6\xd9t$\xf4_)\xc9\xbdi\xd1\xbb\x18\xb1'

在Python3中,string_escape编解码器已被删除,因此等效成为

import codecs
codecs.escape_decode(code2)[0]

答案 1 :(得分:3)

这个例子:

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', ''))

打印True

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

编辑:我刚刚意识到双引号是输出的一部分。基本上你需要传递有效的十六进制字符串,所以其他一切都需要被剥离。在您的情况下,您需要将code2.replace('\\x', '').strip('"')传递给unhexlify。您可以使用eval,但可能会考虑Security of Python's eval() on untrusted strings?以供将来选择。

答案 2 :(得分:-3)

print eval(code2)应该完成这项工作。