chunk — Чтение данных IFF в виде блоков
Этот модуль предоставляет интерфейс для чтения файлов, использующих блоки 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, bigendian, inclheader]) -
Класс, представляющий блок. Аргумент 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() -
Закрыть и перейти к концу блока. Это не закрывает подлежащий файл.
Остальные методы вызовут
IOError, если они будут вызваны после вызова методаclose().-
isatty() -
Возвращает
False.
-
seek(pos[, whence]) -
Установить текущую позицию блока. Аргумент whence необязателен и по умолчанию равен
0(абсолютное позиционирование в файле); другие значения —1(поиск относительно текущей позиции) и2(поиск относительно конца файла). Значение не возвращается. Если подлежащий файл не допускает поиска, разрешены только поиски вперёд.
-
tell() -
Возвратить текущую позицию в блоке.
-
read([size]) -
Прочитать не более size байт из блока (меньше, если чтение достигнет конца блока до получения size байт). Если аргумент size отрицателен или опущен, прочитать все данные до конца блока. Байты возвращаются как строковый объект. Пустая строка возвращается, когда конец блока встречается сразу.
-
skip() -
Перейти к концу блока. Все последующие вызовы
read()для блока вернут''. Если содержимое блока вас не интересует, следует вызвать этот метод, чтобы указатель файла переместился в начало следующего блока.
-
Примечания
-
1 -
«EA IFF 85» Стандарт для файлов обмена форматом, Джереми Моррисон, Electronic Arts, январь 1985 г.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/chunk.html