Spec-Zone.ru › Python 3.5

chunk — Чтение данных IFF в виде кусков

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

Этот модуль предоставляет интерфейс для чтения файлов, использующих куски EA IFF 85. [1] Этот формат используется как минимум в формате файлов аудиообмена (AIFF/AIFF-C) и формате файлов Real Media (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» Стандарт для файлов формата обмена, Джерри Моррисон, Electronic Arts, январь 1985 г.

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

Spec-Zone.ru

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