chunk — Чтение данных, разбитых на части IFF

Исходный код: Lib/chunk.py.

Не рекомендуется, начиная с версии 3.11: Модуль chunk является устаревшим (подробнее см. PEP 594).


Этот модуль предоставляет интерфейс для чтения файлов, использующих чанки EA IFF 85. 1 Этот формат используется как минимум в Audio Interchange File Format (AIFF/AIFF-C) и Real Media File Format (RMFF). Формат аудиофайлов WAVE тесно связан с ним и также может быть прочитан с помощью этого модуля.

Чанк имеет следующую структуру:

Смещение

Длина

Содержание

0

4

Идентификатор куска

4

4

Размер чанка в порядке байтов по старшинству, без учета заголовка

8

n

Байты данных, где n - размер, указанный в предыдущем поле

8 + n

0 или 1

Байт-заглушка необходим, если n нечетно и используется выравнивание по чанкам

ID - это 4-байтовая строка, которая идентифицирует тип чанка.

Поле size (32-битное значение, закодированное с использованием порядка байтов big-endian) дает размер данных чанка, не включая 8-байтовый заголовок.

Обычно файл типа IFF состоит из одного или нескольких чанков. Предлагаемое использование определенного здесь класса Chunk заключается в создании экземпляра в начале каждого чанка и чтении из него до тех пор, пока он не достигнет конца, после чего может быть создан новый экземпляр. В конце файла создание нового экземпляра завершится неудачей с исключением EOFError.

class chunk.Chunk(file, align=True, bigendian=True, inclheader=False)

Класс, представляющий чанк. Ожидается, что аргумент file будет файлоподобным объектом. Экземпляр этого класса специально разрешен. Единственный метод, который необходим, это read(). Если методы seek() и tell() присутствуют и не вызывают исключения, они также используются. Если эти методы присутствуют и вызывают исключение, ожидается, что они не изменили объект. Если необязательный аргумент align равен true, предполагается, что чанки выровнены по 2-байтовым границам. Если align равно false, выравнивание не предполагается. По умолчанию используется значение true. Если дополнительный аргумент bigendian равен false, размер чанков принимается в порядке little-endian. Это необходимо для аудиофайлов WAVE. Значение по умолчанию - true. Если необязательный аргумент inclheader равен true, то размер, указанный в заголовке чанка, включает размер заголовка. Значение по умолчанию - false.

Объект Chunk поддерживает следующие методы:

getname()

Возвращает имя (ID) чанка. Это первые 4 байта чанка.

getsize()

Возвращает размер чанка.

close()

Закрыть и перейти к концу фрагмента. Это не приводит к закрытию основного файла.

Остальные методы вызовут ошибку OSError, если их вызвать после вызова метода close(). До Python 3.3 они вызывали IOError, теперь это псевдоним OSError.

isatty()

Возвращает False.

seek(pos, whence=0)

Установить текущую позицию чанка. Аргумент whence необязателен и по умолчанию имеет значение 0 (абсолютное позиционирование файла); другие значения: 1 (поиск относительно текущей позиции) и 2 (поиск относительно конца файла). Возвращаемое значение отсутствует. Если базовый файл не разрешает поиск, то разрешен только прямой поиск.

tell()

Возвращает текущую позицию в чанке.

read(size=- 1)

Прочитайте не более size байт из чанка (меньше, если чтение достигнет конца чанка до получения size байт). Если аргумент size отрицательный или опущен, считываются все данные до конца чанка. Пустой объект bytes возвращается, если конец чанка встречается немедленно.

skip()

Переход к концу фрагмента. Все последующие вызовы read() для чанка будут возвращать b''. Если вас не интересует содержимое чанка, этот метод следует вызывать так, чтобы файл указывал на начало следующего чанка.

Сноски

1

«EA IFF 85» Стандарт для файлов формата обмена, Джерри Моррисон, Electronic Arts, январь 1985 года.

Вернуться на верх