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

ディクショナリの処理は順調に進んでおり、有効なキーと値のペアを一度だけ取得できます。ループ部分が機能していないため、シリアル データをどれだけ受信しても、1 つのキーと値のペアしか取得できません。

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 には長さが 57 のエントリが 1 つしかないということですよね?

コードを少しきれいにして、デバッグを追加します。それをシンプルに保ち、あなたが持っているものに近づけます:

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 に長さが 57 のエントリが複数あると予想している場合、「データは正常に受信されている」と確信できますか?

于 2012-07-27T13:12:26.467 に答える