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.6/library/chunk.html