如何将已知的二进制数据转换为Python中的对象?

陈梓泉*_*陈梓泉 -1 python io binary pickle

例如,我已经知道二进制数据:

"b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'"
Run Code Online (Sandbox Code Playgroud)

这是一个字母对象.

如何将其翻译成dict对象?我只能找到将文件读入对象的方法,但我找不到将现有数据转换为对象的方法.

sna*_*erb 5

您可以使用pickle模块将二进制数据转换为python对象:

>>> bs = b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
>>> import pickle
>>> loaded = pickle.loads(bs)
>>> loaded
{'score': 88, 'age': 20, 'name': 'Bob'}
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于使用pickle模块中的工具序列化的对象 - pickle.dumppickle.dumps.pickle模块不能反序列化任意二进制数据.

此外,您应该只从可信源中取消对象,因为取消对象可能会导致代码执行.