我正在尝试解码和处理二进制数据文件,以下是一种数据格式
input:9,data:443,gps:3
并以相同的[key:value]
格式存储更多数据。
基本上,我需要为该文件创建一个字典,以便以后处理。
输入:b'input:9,data:443,gps:3'
所需的输出:{'input': '9', 'data': '443', 'gps': '3'}
答案 0 :(得分:1)
您的输入数据为bytes(字节序列)。要将其转换为str
对象,可以使用bytes.decode()
。比起用谎言处理数据谎言来说,更要用,
和:
对其进行分割。代码:
inp = b"input:9,data:443,gps:3"
out = dict(s.split(":") for s in inp.decode().split(","))
答案 1 :(得分:0)
字符串input:9,data:443,gps:3
是文本,而不是二进制数据,因此我将猜测视为格式模板,而不是文件内容的样本。这种格式意味着您的文件有一个“输入”字段,该字段长9个字节,后跟443个字节的“数据”,后跟3个字节的“ gps”值。此描述未指定字段的类型,因此不完整;但这是一个开始。
用于结构化二进制文件的Python工具是模块struct。以下是将三个字段提取为bytes
对象的方法:
import struct
with open("some_file.bin", "rb") as binfile:
content = binfile.read()
input_, data, gps = struct.unpack("9s443s3s", content)
函数struct.unpack
除了s
还提供了许多其他格式;这只是一个例子。但是没有用于纯文本字符串的说明符,因此,如果input_
是文本字符串,则下一步是将其转换:
input_ = input_.decode("ascii") # or other encoding
由于您要求提供结果字典,因此这是一种方法:
result = { "input":input_, "data": data, "gps": gps }
答案 2 :(得分:-1)
使用eval
的解决方案:
inp = b"input:9,data:443,gps:3"
out = eval(b'dict(%s)' % inp.replace(b':', b'='))