如何在Python中将实时JSON数据(来自传感器)格式化为Excel工作簿?

2024-06-25 23:14:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个Python新手,我想把传感器的位置数据(JSON格式)转换成Excel工作簿。传感器被连续轮询,因此JSON数据是一个永不结束的字符串。在

现在,代码中有趣的部分是,数据用JSON编码,然后打印“LS:Received”,代码片段如下:

 def request(self, jsonStr, timeout = 20):
    try:
        msgToSend = jsonStr.encode(encoding = "utf-8");
        bytesSent = 0
        while bytesSent < len(msgToSend):
            bytesSent += self.svcSocket.send(msgToSend[bytesSent:])

        recvMessage = ""
        while True:
            ready = select.select([self.svcSocket], [], [], timeout)
            if ready[0]:
                recvMessage += self.svcSocket.recv(1024 * 1024).decode(encoding = "utf-8")
                if "\n" in recvMessage: #Complete message ends with \n
                    break
            else:
                #timeout...
                break

第二个片段如下:

^{pr2}$

我的示例代码(直接来自制造商)在这里(Python Code for RTLS)。没有合适的硬件,它就不能编译。在

该代码的输出是

收到:收到:收到的:除“id”:“0xdecan303030601ea0”,“时间戳”:15295466,“msgid”:69791,“坐标”:“{“x“:0.664,“y“:0.226,“z“:0.000,“标题:0.000,“pqf“:100“,“距离“““,““““:0.000,“pqf“:100“,“距离““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““:0.170,“dqf”:100}]}

接收:接收:接收到的:除“id”:“0xdecad303030601ea0”,“时间戳”:15295515,“msgid”:69792,“坐标”:“{“x“:0.664,“y“:0.226,“z“:0.000,“标题:0.000,“pqf“:100“,“距离“““,““““:0.000,“pqf“:100“,“距离“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““:0.170,“dqf”:100}]}

收到:收到的:收到的:除“id”:“0xdecan303030601ea0”,“时间戳”:15295565,“msgid”:69793,“坐标”:“{“x“:0.664,“y“:0.226,“z“:0.000,“标题:0.000,“pqf“:100“,“距离“““,““““:0.000,“pqf“:100“,“距离“““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““:0.170,“dqf”:100}]}

这一直持续到我关闭程序。在

第一个id是移动“标签”的id,它在一个由“锚”封装的区域中移动。id是不变的,永远不会改变。当然,有了更多的锚,会有更多,但他们的“名字”总是一样的 . 在

标记的坐标在x、y、z方向。它们不断变化。在

Dist是锚点到标记的距离。它不断变化。在

Msgid是消息id,它会随着每条消息的增加而递增。在

时间戳也更改。在

其余的数据可以忽略。在

我心目中的电子表格应该只显示x、y、z和dist作为更改参数,如下所示(还不能发布图像):

Sample Excel Sheet

我曾经尝试过使用xlwt包,但是我一辈子都无法理解如何解析这个传入的JSON数据。我试图使用split(),但没用。我对Python的缺乏经验真的拖慢了我的速度。在

任何建议,无论多么微不足道,我们都将不胜感激。非常感谢。在


Tags: 数据代码selfidjson距离标题时间
2条回答

没关系,你没有做我认为你在做的事。尝试使用simplejson模块。以下是您可能会做的:

>>> import simplejson
>>> json = simplejson.loads(recvData.decode('utf-8'))

此时,json应该是表示该响应的字典。在

我想我也会创建csv而不是Excel文档。一旦你习惯了XLWT就足够简单了,但是你可以更容易地创建CSV文件,而且你不需要做任何花哨的格式化。在

您可以尝试使用我的库pyexcel来帮助您将python data导出到任何类型的excel文件(csv、xls、xlsx或ods)。在

下面是一段示例代码:

>>> import pyexcel as pe
>>> import pyexcel.ext.xls
>>> data=[[1,2]]
>>> pe.save_as(array=data, out_file='test.xls')

相关问题 更多 >