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» Стандарт для файлов формата обмена, Джерри Моррисон, Electronic Arts, январь 1985 года.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/chunk.html