2016-05-12 3 views
-1

Это мой первый раз, когда я работаю с бинарными файлами, прямо так голыми со мной.интерпретация двоичных данных в Python

Я использую Python 2.7

Я пытаюсь использовать большой двоичный файл, который определяет широту/долготу каждого пикселя изображения.

Используя этот код: 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. Файлы начинаются с 2 4-байтовых целочисленных значений, что дает размер файла и пикселя и строки (x, y). После того, как файлы имеют следующие пары элементов, это 2-байтовые целочисленные значения широты и долготы, умноженные на 100 и усеченные (например, 75.324 E - «-7532»).

Спасибо за любую помощь.

Обратите внимание, причина в том, что это в конечном итоге было бы нарисовать/изменить изображение на основе lat/long, а не на пиксель #, если кто-то задавался вопросом.

+1

Вы можете преобразовать это в массив NumPy. Это было бы удобно? Кстати, вы используете Python 2 или Python 3? –

+0

Двумя основными инструментами для этого в python являются модуль ['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, вероятно, будет самым простым и быстрым. [Здесь] (http://stackoverflow.com/questions/14245094/how-to-read-part-of-binary-file-with-numpy) пример. Я предлагаю вам попробовать его и задать конкретный вопрос, если у вас есть проблемы с ним. – tom10

+0

Извините, отредактировал, используя Python 2.7. – MattS

ответ

0

Обычно при работе с бинарными файлами вы хотите использовать пакет и распаковать (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 

    ... 

выше не было на самом деле запустить или тест, просто пытаюсь дать вам общее представление о подходе.

Смежные вопросы