Spec-Zone.ru › Python 3.7

chunk — Чтение данных IFF по частям

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

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

Блок имеет следующую структуру:

Смещение

Длина

Содержимое

0

4

Идентификатор блока

4

4

Размер блока в big-endian формате, без заголовка

8

n

Данные байтов, где n — размер, указанный в предыдущем поле

8 + n

0 или 1

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

Идентификатор — строка из 4 байтов, которая определяет тип блока.

Поле размера (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» Стандарт для файлов формата обмена, Jerry Morrison, Electronic Arts, январь 1985 года.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/chunk.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API