python中键值对的垃圾打印值

时间:2016-05-05 05:52:03

标签: python

我有一个名为数据的键值对,如下所示

{'source_addr_long': '\x00\x13\xa2\x00@\xf7\nP', 'rf_data': 'python', 'source_addr': '\xe5\xbd', 'id': 'rx', 'options': '\x01'}

我现在有兴趣检索source_addr_long和rf_data。

如果我print data,则显示上述输出

如果我这样做

print data['source_addr_long']

输出是下面的垃圾

?@?

P

我也做了下面的代码

for k, v in data.iteritems():
           print k, v

,输出

source_addr_long ?@?

P

rf_data python

source_addr ?

id rx


options

似乎source_addr_long键的值具有转义序列,该值无法正确打印。有关如何解决它的任何想法?

1 个答案:

答案 0 :(得分:0)

当你用python字符串写'\x00\x13\xa2'时,python实际上创建了3个字节的字符串

>>> len('\x00\x13\xa2')
3

包含值(十进制形式){0, 19, 162}。 当你尝试将它们写入终端时,大多数这些字节会产生垃圾。

您可以尝试稍微转义并尝试执行以下命令:

>>> print '\x68\x65\x6c\x6c\x6f'  # it's actually string of 5 chars

如果要以人类可读的形式打印字节(通常用于调试),在python中使用repr函数很方便。在你的情况下

>>> data = {'source_addr_long': '\x00\x13\xa2\x00@\xf7\nP', 'rf_data': 'python', 'source_addr': '\xe5\xbd', 'id': 'rx', 'options': '\x01'}
>>> print repr(data['source_addr_long'])
'\x00\x13\xa2\x00@\xf7\nP'