Pythonで図1のようなバイナリファイルを解析をしたいと考えています。
テキストファイルに変換すると情報の概要と、2048×2048の数値データとなっています。
最終的にはこのバイナリファイルをテキストファイルにあるような数値データに変換する手段を見つけたいと考えています。基本的にはpythonでjupyter labを用いて解析を行っています。
以下に私の試行錯誤した結果を示します。
Python
1with open('xray-1.bin', 'rb') as f: 2 b = f.read() 3 #513から数値データスタート 4 data = b[513:] 5print(data[:100])
Python
1#実行結果 2b'\x00\xf8\x00\x0f\x01\xe3\x00\xd6\x00\xd8\x00\xf1\x00\xe8\x00\xde\x00\x00\x01\xe0\x00\xda\x00\xd7\x00\xf1\x00\xe2\x00\xec\x00\xf1\x00\xfa\x00\xde\x00\xef\x00\xdc\x00\xdf\x00\x03\x01\xef\x00\xec\x00\xe1\x00\xf0\x00\x03\x01\xd5\x00\xd9\x00\xda\x00\xe3\x00\xd9\x00\xdf\x00\xea\x00\xf7\x00\xf9\x00\xfa\x00\xff\x00\xe2\x00\xd7\x00\xe2\x00\xe0\x00\xd6\x00\xe7\x00\xe2\x00\xeb\x00\xf4\x00\xe8\x00#\x01\xe4'
data内部の数値データを個別に算出します。
Python
1data[0] 2>> 0 3data[1] 4>> 248 5data[2] 6>> 0 7data[3] 8>> 15 9data[4] 10>> 1 11data[5] 12>> 227 13len(data) 14>> 8388607
また、図2に示しているテキストファイル形式での値の出力を5番目まで見てみると
213,248,271,227,214
となっており、バイナリファイルからの出力では欠損しているデータと表示できているデータが存在することがわかります。
その表示されているデータの間には基本的に0、もしくはここでいう1や15のような不必要なデータを含まれてしまっています。この不必要なデータによって本来のデータサイズは2048×2048で表せてほしいところ、lenで表示させたところそれよりも多い値が検出されていると考えられます。
ここで疑問なのが
⓵dataをまとめてprintするときと個別にプリントするときの出力形式の違いはなぜ生じるのか?
⓶バイナリファイルにおいて欠けている数値、不必要なデータというのは何が原因として出てきてしまうのか?
またそれを解決するための手段には何が考えられるのか?
以上がお分かりになる方がいらっしゃいましたら、アドバイスをいただきたいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー