2016-10-14 9 views
2

私はpixhawkから引き出されたデータセットを持っています。私はこのデータを解析し、時間の一部をプロットしようとしています。私はこのようになりますデータを取得で区切られ、16進数で表示されるデータの種類は?

with open("px4log.bin", "rb") as binary_file: 
    # Read the whole file at once 
    data = binary_file.read() 
    print(data) 

::私はビンのいずれかのファイルを開くには、このコードを使用するときに問題がある

b'\xa3\x95\x80\x80YFMT\x00BBnNZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Type,Length,Name,Format,Columns\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x95\x80\x81\x17PARMNf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Name,Value\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x95\x80\x82-GPS\x00BIHBcLLeeEefI\x00\x00\x00Status,TimeMS,Week,NSats,HDop,Lat,Lng,RelAlt,Alt,Spd,GCrs,VZ,T\x00\x00\xa3\x95\x80\x83\x1fIMU\x00Iffffff\x00\x00\x00\x00\x00\x00\x00\x00\x00TimeMS,GyrX,GyrY,GyrZ,AccX,AccY,AccZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0 

私はバイナリであることを想定していると言われたが、そうではありません。 Pythonがそれを開いているときにデータセットに対して何かをやっていないかぎり?

あなたはからあなたが希望の場合設定されたこのサンプルデータをダウンロードすることができます:Pythonはあなたの文字が通常のascii文字に対応していないときhexadecimalで表されたバイナリデータを示している

https://pixhawk.org/_media/downloads/px4log_sample_1.px4log.zip 
+1

*」に追加 ' 'b'' modeはファイルをバイナリモードで開きます。データはバイトオブジェクトの形式で読み書きされます。 "* [The docs](https://docs.python.org/3/tutorial/inputoutput.html#reading-そして書き込みファイル) – CoryKramer

+0

あなたの次の質問は「しかし、私はこれらのバイトで何をするのですか?」と答えてください。答えは[yo uを展開する](https://docs.python.org/3/library/struct.html) – CoryKramer

+0

@CoryKramer各バイトの位置を知っていますか?データがどのように構造化されているかの鍵がありますか?それを知る必要はありませんか? –

答えて

1

。例えば、\xa3は、16進値A3のバイトであり、バイナリで10100011です。一方、Tは、01010100のバイトである\x54として印刷することができます。 print関数を使用していたので、Pythonはバイナリデータを人間が読める文字列に変換しようとしていると仮定して、\x54の代わりに対応する文字Tを示しました。

あなたのデータを表すバイナリ文字列の配列を取得するには、次のコードを使用することができます。ここでは

data = '\xa3\x95\x80\x80YFMT\x00BBnNZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Type,Length,Name,Format,Columns' 

decimalArray = map(ord,data) 
byteArray = map(lambda x: "{0:b}".format(x), decimalArray) 
print byteArray 

が出力されます。

['10100011', '10010101', '10000000', '10000000', '1011001', '1000110', '1001101', '1010100', '0', '1000010', '1000010', '1101110', '1001110', '1011010', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1010100', '1111001', '1110000', '1100101', '101100', '1001100', '1100101', '1101110', '1100111', '1110100', '1101000', '101100', '1001110', '1100001', '1101101', '1100101', '101100', '1000110', '1101111', '1110010', '1101101', '1100001', '1110100', '101100', '1000011', '1101111', '1101100', '1110101', '1101101', '1101110', '1110011'] 
+0

このようなデータを解析するのは難しいですか? –

+0

@ J.Jones:Aldenは何かを説明しようとしていますが、データの解析について設定する方法を示していません。 –

+0

@BillBell Gotchaなので、これはPythonが読んでいるところです。私がまだ他のコメントから理解できないことは、データ構造が何であるかをPythonに伝える方法です。私はunpack.structで読んでみましたが、これをしようとしているレンガの壁に当たっています。 –

関連する問題