Эквивалент MATLAB в Python для чтения двоичного файла [дубликат]

Если куб находится непосредственно внутри контейнера:

#container:hover > #cube { background-color: yellow; }

Если куб рядом с (после закрытия контейнера), контейнер:

#container:hover + #cube { background-color: yellow; }

Если куб где-то внутри контейнера:

#container:hover #cube { background-color: yellow; }

Если куб является дочерним элементом контейнера:

#container:hover ~ #cube { background-color: yellow; }
12
задан Matthew Rankin 8 February 2013 в 16:15
поделиться

3 ответа

Из документации fread , это функция для чтения двоичных данных. Второй аргумент определяет размер выходного вектора, третий - размер / тип прочитанных элементов.

Чтобы воссоздать это в Python, вы можете использовать array :

f = open(...)
import array
a = array.array("L")  # L is the typecode for uint32
a.fromfile(f, 3)

Это будет читать три значения uint32 из файла f, которые затем доступны в a. Из документации по fromfile :

Прочитайте n элементов (как машинные значения) из файлового объекта f и добавьте их в конец массива. Если доступно меньше n элементов, EOFError будет поднят, но элементы, которые были доступны, все еще вставлены в массив. f должен быть реальным встроенным файловым объектом; что-то еще с методом read () не будет делать.

Массивы реализуют протокол последовательности и, следовательно, поддерживают те же операции, что и списки, но вы также можете использовать метод .tolist() для создания обычный список из массива.

7
ответ дан Torsten Marek 19 August 2018 в 07:34
поделиться
  • 1
    Спасибо, это действительно помогло - сейчас все работает! – Duncan Tait 27 January 2010 в 13:14

Первая часть покрыта ответом Торстена ... вам понадобятся array или numarray, чтобы что-либо делать с этими данными.

Что касается% 08X и hex2dec stuff,% 08X - это только формат печати для этих чисел unit32 (8-разрядный шестнадцатеричный, точно такой же, как Python), и hex2dec ('4D445254') - это matlab для 0x4D445254.

Наконец, ~ = в matlab побитовое сравнение; use == в Python.

0
ответ дан Andrew McGregor 19 August 2018 в 07:34
поделиться

Действительно, я хочу знать, как реплицировать [A, count] = fread(fid, 3, 'uint32');

. В Matlab одна из подписей fread() - fread(fileID, sizeA, precision). Это читается в первых sizeA элементах (а не байтах) файла, каждый из которых достаточен для precision. В этом случае, поскольку вы читаете в uint32, каждый элемент имеет размер 32 бита или 4 байта.

Итак, попробуйте io.readline(12), чтобы получить первые 3 4-байтных элемента из файла.

8
ответ дан Matthew Rankin 19 August 2018 в 07:34
поделиться
  • 1
    Отличный ответ, хорошо объясненный хорошими четкими примерами. – Dipole 1 December 2015 в 17:22
Другие вопросы по тегам:

Похожие вопросы: