0

数百から数千行の大量のデータを受け取ります。フォーマットは同じで、約 50 行のデータで、同じタイプのデータが繰り返されます。データが何を表しているかはわかっていますが、受信したデータにはこれが含まれていません。

したがって、受信したデータは次のようになります。

     Value(int):       703                                                    
     Value(int):       12                                                     
     Value(int):       58                                                     
     Value(int):       0                                                      
     Value(int):       -1                                                     
     Value(int):       88                                                     
  Value(string):       272                                                    
  Value(string):       01                                                     
     Value(int):       61                                                     
     Value(int):       0                                                      
     Value(int):       0    

しかし、私はそれぞれが何を意味するかを知っています。

fcn:Integer
Range: 0 to 16383
Code:Integer
Range: 0 to 511
CountryCode:String
^\d{3}$
NetworkCode:String

これらの繰り返し、このデータを解析して、各繰り返しシリーズの最初の要素などを比較して比較できるようにする簡単な方法は何ですか? 構造体を作ることはできますか?辞書が必要ですか、それともどうすればいいですか? この種の質問が許可されているかどうかはわかりませんが、基本的には、どのように行うのか、またその理由を知りたいと思っています。

ここに繰り返しデータの 1 つのラウンドがあります。各値の各名前が何であるかにこだわっています。したがって、私が受け取っているところは、それが次Value(int): 1のことであることがわかりBand Nameます。

Band Name: 
     Value(int):     1
Cell Scan Time
  Value(string):     2013-04-03T08:21:10Z
       Sequence: 
       Sequence: 
ARFCN/UARFCN --->2112.8 MHz DL / 1922.8 MHz UL
     Value(int):       10564
RSSI
     Value(int):       39
BSIC/SCODE
     Value(int):       263
RXQUAL
     Value(int):       0
FREQ OFFSET
     Value(int):       9
FREQ QUAL
     Value(int):       90
MCC
  Value(string):       272
MNC
  Value(string):       05
LAC
     Value(int):       67
RAC
     Value(int):       67
RNC Identity
     Value(int):       708
Cell ID
     Value(int):       130
CPICH TX POWER
     Value(int):       31
Patch Loss
     Value(int):       102
CPICH EC over N0
     Value(int):       -5
CPICH RSCP
     Value(int):       -76
RXLEV + CPICH EC
     Value(int):       0
TX Diversity

QQUAL MIN
     Value(int):       -20
QRXLEV MIN
     Value(int):       -111
HCS Priority
     Value(int):       -1
DeltaQHcsRscp
     Value(int):       -1
Scan Temperature 
     Value(int):       0

以下は、受信したデータの数セットごとに 1 回だけ繰り返され、残りは常に同じ形式で繰り返されます。

Band Name: 
     Value(int):     1
Cell Scan Time
  Value(string):     2013-04-03T08:21:10Z
       Sequence: 
       Sequence: 

完全な出力サンプル: http://pastebin.com/ArGfm2cD

編集:

現在、データを変数に保存しています。

proc = subprocess.Popen(cmd_rancli, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc_stdout  = proc.communicate(ran_opt_get_access_data)[0]
print proc_stdout
4

1 に答える 1

1

まず、問題をよりよく理解するために、データ ストリームとどのように同期しますか? 私が得たのは、この値を次々に取得し、それらを何らかの方法で実装された構造に配置する必要があるということです。連続ストリームまたはテキスト ファイルがある場合、これは別の方法で実行する必要があります。とにかく、ストリームを取得し、最初の値が X、2 番目の Y などであることがわかっていると仮定すると、次のことができます。

1) 必要なすべてのフィールドを含む辞書またはクラスを作成します。

2)受け取ったフィールドを取得してタイプを確認します(たとえば、intを期待する場合は、受け取った文字列に「int」が含まれているかどうかを確認できます)

3) 変換を行い、考えられる例外を管理します ("int" が見つかったのに "gatto" が見つかった場合はエラーです)

4)抽出した値を入力します(行が「Value(int):10」の場合int(line.split(":")[1]))、データ構造の正しい位置などで行うことができます.

シーケンスを受け取った場合は、「3 番目の位置で文字列を待機している場合、int を取得するとどうなるか」という意味で、型の一貫性もチェックする必要があります。

明確ですか、それとももっと説明/例が必要ですか?

于 2013-04-15T11:43:26.417 に答える