在Python中按长度以字节为单位拆分数组

时间:2013-01-28 17:13:02

标签: python split tornado

我有一个传感器系统。传感器接收来自我的命令,做一些事情,然后向我发送回复。

响应是这样的:

seq. number |   net_id  |   opcode_group |  opcode | payloadlength    |   val

我将这些值用空格字符分隔。

现在我想取名为val的最后一个值。在这一部分中,我将获得所有我想知道的信息,以详细说明传感器的响应。

例如,我对想要知道传感器的IEEE MAC地址的命令有这个响应:

response

在这种情况下,val是响应中Length之后的所有字段。没有分离,但我有一种字符串。

我所要做的就是分割这个数组/数字串,只知道每个字段的长度。对于前者状态为1个字节,MAC地址为8个字节,依此类推......

我的代码是:

if response.error:
        ret['error'] = 'Error while retrieving unregistered sensors'
    else:
        for line in response.body.split("\n"):
            if line != "": 
                value = int(line.split(" ")[6])

    ret['response'] = value
    self.write(tornado.escape.json_encode(ret))
    self.finish()               

    if command == 'IDENTIFY':
        status = value.split(" ")[0]
        IEEEAddrRemoteDev = value.split(" ")[1]
        NWKAddrRemoteDev = value.split(" ")[2]
        NumOfAssociatedDevice = value.split(" ")[3]
        StartIndex = value.split(" ")[4]
        ListOfShortAddress = value.split(" ")[5]
        if status == 0x00:
            ret['success'] = "The %s command has been succesfully sent! \
            IEEE address: %s" % % (command.upper(), IEEEAddrRemoteDev)
            self.write(tornado.escape.json_encode(ret))
        elif status == 0x80:
            ret['success'] = "Invalid Request Type"
            self.write(tornado.escape.json_encode(ret))
        elif status == 0x81:
            ret['success'] = "Device Not Found"
            self.write(tornado.escape.json_encode(ret))

在第一部分中,我从整个响应中取出第6个值,然后将其放在变量value中。在此之后,我想在每个组件中拆分此变量。

对于前。这status = value.split(" ")[0]我必须以哪种方式拆分????

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

val字段的确切格式是什么(即代码中value的内容)?它是一个字符串?一个字节序列?

如果是字符串,您可以使用:

   status = value[0]
   IEEEAddrRemoteDev = value[1:8]
   NWKAddrRemoteDev = value[9:2]
   NumOfAssociatedDevice = value[11:1]
   StartIndex = value[12:1]
   ListOfShortAddress = value[13:2*NumOfAssociatedDevice]

如果是字节序列,那么您可以使用struct.unpack() - 请参阅here

答案 1 :(得分:0)

问题是你将它视为一个Python字符串,但它只是一堆。

您需要使用struct.unpack将其拆分。