从文件解码和处理二进制字节的最佳方法

时间:2019-09-02 13:07:44

标签: python dictionary parsing binaryfiles

我正在尝试解码和处理二进制数据文件,以下是一种数据格式 input:9,data:443,gps:3 并以相同的[key:value]格式存储更多数据。

基本上,我需要为该文件创建一个字典,以便以后处理。

输入:b'input:9,data:443,gps:3'

所需的输出:{'input': '9', 'data': '443', 'gps': '3'}

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