2016-05-12 5 views
-1

これは初めてバイナリファイルを使って作業しています。私は、画像の各画素の緯度/経度を指定し、大きなバイナリファイルを使用しようとしているのPython 2.7バイナリデータをPythonで解釈する

を使用してい

このコードを使用する:open('input', 'rb').read(50)

ファイルには、次のようになります。 \x80\x0c\x00\x00\x00\x06\x00\x00.\x18\xca\xe4.\x18\xcc\xe4.\x18\xcf\xe4.\x18\xd1\xe4.\x18\xd3\xe4.\x18\xd5\xe4.\x18\xd7\xe4.\x18\xd9\xe4/\x18\xdb\xe4/\x18\xdd\xe4/\x18 ...

読み取り私にファイルを復号化のために、以下の情報を提供しますが、私はそれらを適用する方法がわかりませんよ:

ファイルの順序はLSBFです。ファイルは、ファイルのピクセルとライン(x、y)サイズを示す2つの4バイト整数値で始まります。ファイルの後続の要素の後に、緯度および経度の2バイト整数値に100を掛けて切り捨てる(例えば、75.324Eは「-7532」)。

ありがとうございました。

これを行う理由は、最終的に誰かが不思議に思っていた場合に備えて、緯度/経度に基づいて画像を描画/変更するのではなく、ピクセルではなく変更することです。

+1

これをNumPy配列に変換することができます。それは便利だろうか?ところで、あなたはPython 2またはPython 3を使用していますか? –

+0

これはPythonでの主な2つのツールです。['struct'](https://docs.python.org/2/library/struct.html)モジュールと[' numpy.fromfile'](http:// docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.fromfile.html)。大量のデータを考えると、numpyはおそらく最も簡単で高速です。 [Here's](http://stackoverflow.com/questions/14245094/how-to-read-part-of-binary-file-with-numpy)の例です。あなたがそれに問題があるなら、それを試して特定の質問を投稿することをお勧めします。 – tom10

+0

Sorry、編集者:Python 2.7を使用しています。 – MattS

答えて

0

一般にバイナリファイルを扱うときは、packとunpack(https://docs.python.org/2/library/struct.html)関数を使いたいと思うでしょう。これにより、データとデータ型のエンディアンを制御することができます。あなたはおそらく最初のヘッダ情報を読みたいと思うでしょう、あなたの特定のケースでは、

with open('input', 'rb') as fp: 

    # read the header bytes to get the number of elements 

    header_bytes = fp.read(8) 

    # convert the bytes to two unsigned integers. 

    x, y = unpack("II", header_bytes) 

    # Loop through the file getting the rest of the data 
    # read Y lines of X pixels 

    ... 

上記のようなものは、実際に実行したり、テスト、ちょうどあなたのアプローチの一般的な意味を与えるしようとしていませんでした。

関連する問題