1

我今天花了很大一部分时间来解决这个问题——我正在从串行端口服务器设备(通过套接字模块)读取数据。数据输入正常,我正在尝试对其进行简单的字符串处理(确认正确的数据块大小),然后再添加时间戳并将完整的块放入字典中,以时间戳为键。这是代码:

for i in range(0, (len(rawData)+1)):
    if len(rawData[i]) == 57:
        ss2000_data[str(time.time())] = (rawData[i].split(', '))
        print ss2000_data
    else: continue

字典处理正常,因为我得到了一个有效的键:值对——一次!循环部分不起作用,所以无论我收到多少串行数据,我只会得到一个键:值对。

我已经扫描了这里的问题,也在 Python.org 论坛上,还浏览了文档“Learning Python”、“Python Pocket Ref”和 python.org 上的 Python 教程,但我没有得到任何结果。我也是 Python 的相对菜鸟。我将不胜感激任何有关潜在信息来源的建议或指示。提前感谢,非常感谢

4

2 回答 2

1

(我假设 rawData 包含来自串行连接的一些行/数据报。)

time.time()不保证提供几分之一秒。您可能处理得太快而time.time()无法提供其初始值以外的任何内容。尝试str(i)在您用于存储拆分数据的密钥之前添加,或使用另一个i保证随每个循环更改的密钥(可能从 派生)。

于 2012-07-27T04:42:39.523 回答
1

如果只打印 1 个条目,这意味着 rawData 中只有 1 个条目的长度为 57,对吗?

稍微清理一下代码,并添加一些调试。保持简单和接近你所拥有的:

for block in rawData:
  print 'Block,len=%d' % (len(block),)
  if len(block) == 57:
     ss2000_data[str(time.time())] = (block.split(', '))
     print ss2000_data

如果您期望 rawData 中有超过 1 个长度为 57 的条目,那么您确定“数据输入正常”吗?

于 2012-07-27T13:12:26.467 回答