2012-07-27 72 views
1

我已經花了很大一部分今天摔跤與這一個 - 我正在從串行端口服務器設備(通過套接字模塊)讀取數據。數據進入OK狀態,我正在嘗試對它進行簡單的字符串處理(確認正確的數據塊大小),然後添加時間戳並將完整的塊放入字典中,並將時間戳作爲關鍵字。這裏是代碼:Python - 如何映射和追加列表條目動態字典

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論壇,並且還閱讀了文檔「學習Python」,「Python Pocket Ref」和python.org上的Python教程,但是我沒有到任何地方。我也是Python的親戚。我會很感激任何建議或指向潛在的信息來源。 由於提前,十分讚賞

+1

你的字典只能得到一個條目,但那些'print ss2000_data'語句呢?你看到不止一個嗎? – azhrei 2012-07-27 04:54:28

+1

'else:continue'?看起來有點不必要。 – 2012-07-27 05:11:32

+0

@azhrei:不,我只打印1個條目 – 2012-07-27 12:46:35

回答

1

(我將假定RAWDATA包含從串行連接一些線路/數據報。)

time.time()不能保證提供幾分之一秒。對於time.time(),您可能處理得太快以提供除初始值之外的任何內容。嘗試將str(i)添加到您用於存儲拆分數據的密鑰中,或者使用另一個密鑰(可能來自i),該密鑰保證隨每個循環而改變。

+0

我使用的str(time.time())構造旨在爲過程工具的一行串行數據提供一個鍵。這樣創建的計時數據對於過程數據的時間標記是有用的,另外我很舒服,這將確保沒有重複的鍵。對時間延遲的瞭解非常有用。我會探討這一點。謝謝! – 2012-07-27 12:54:34

+0

我不認爲計時會成爲一個問題,因爲在早期版本的代碼中,我實際上在每個串行數據字符串的開始處添加了一個時間戳,但隨後出現問題時將第一項作爲關鍵字一個dict()構造,所以我走了這條路。我也認爲我可以用更少的代碼得到我想要的東西!我想我會回去重新訪問早先的想法。 – 2012-07-27 13:22:53

+0

我重構了代碼,因此我只會在每次調用此模塊時「剔除」一個完整的數據塊,然後使用此信息返回單個詞典條目,避免由於此調用的延遲而導致的潛在延遲。迭代循環。謝謝! – 2012-08-02 00:31:23

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的長度,那麼你肯定「數據在確定來了」?

+0

嘿,Azhrei,謝謝你。我敢肯定它的工作原理是因爲代碼中的更多內容我只是按照你的建議做的......我打印rawData,並且得到了正確長度的多個塊。我必須重新訪問這個代碼來檢查時間問題,但是上面的塊長度打印短語比我所做的更好。 – 2012-07-27 21:01:20

+0

使用了錯誤的格式,這裏再次發表評論......感謝。我敢肯定它的工作原理是因爲代碼中的更多內容我只是按照你的建議做的......我打印rawData,並且得到了正確長度的多個塊。 – 2012-08-01 17:21:16