- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:pythonでバイナリデータを配列に読み込みたい)
Pythonでバイナリデータを配列に読み込む方法
このQ&Aのポイント
- Python初心者の方に向けて、バイナリデータを配列に読み込む方法について解説します。
- 具体的には、2バイトずつ読み込んで100*100の2次元配列に格納する方法を紹介します。
- また、データの受け渡し方法についても説明します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
http://docs.python.jp/2/library/stdtypes.html#file.read にあるように、ファイルオブジェクトのreadはstringを返します。つまり、 data = f.read(bytesize*x*y) なら、dataがstringです。 stringなので、Xバイト目の「文字」は data[X] で取り出せます。 これは、元のバイナリデータの1バイトを、対応する「文字」にしたものです。元のバイナリデータを得るには、逆変換する必要があります。文字のコードを得るのには、ord関数( http://docs.python.jp/2/library/functions.html#ord )を使います ord(data[X]) 2バイトから16bitの整数を取るには、まず、2バイトそれぞれの値を得ます a0=ord(data[X0]) a1=ord(data[X1]) ここで、上位を8ビット左へシフトして、下位とのORを取れば、16ビットになります。 ただ、上記のa0,a1のどちらが上かは、どう保存したかによるので、今ある情報だけでは判断できません。 # a0が上なら Y=a0 << 8 | a1 また、符号有り16bit整数だと、もう少し複雑になります。 全てのi,jについて、array[i][j]に対応するバイト位置 X0,X1 を求め、計算した値を代入する、という流れになります
お礼
素早いご回答ありがとうございます。 思っていたより、複雑な手順が必要になるのですね。。。 いろいろと検索した結果、 私の場合、配列を多用することになりそうなので、 できるだけシンプルな手順で書けるように、 numpyというのを利用しようかと考えています。 まだ試行錯誤中ですが、一応参考までに numpyを利用して以下のようなコードを書いています。 ######################################### import numpy as np filename = './test.bin' data = np.fromfile(filename, dtype='H') array = data.reshape(100,100) #########################################