我有一个名为数据的键值对,如下所示
{'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键的值具有转义序列,该值无法正确打印。有关如何解决它的任何想法?
答案 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'