chunk
— Читання фрагментованих даних IFF¶
Вихідний код: Lib/chunk.py
Цей модуль забезпечує інтерфейс для читання файлів, які використовують фрагменти EA IFF 85. 1 Цей формат використовується принаймні у форматі файлів обміну аудіофайлами (AIFF/AIFF-C) і форматі реальних медіафайлів (RMFF). Формат аудіофайлу WAVE тісно пов’язаний і його також можна читати за допомогою цього модуля.
Чанк має таку структуру:
Зсув |
Довжина |
Зміст |
---|---|---|
0 |
4 |
ID блоку |
4 |
4 |
Розмір блоку в порядку байтів у порядку байтів, не включаючи заголовок |
8 |
n |
Байти даних, де n — розмір, указаний у попередньому полі |
8 + n |
0 або 1 |
Якщо n є непарним і використовується вирівнювання фрагментів, необхідний байт заповнення |
Ідентифікатор — це 4-байтовий рядок, який ідентифікує тип послідовності.
Поле розміру (32-бітне значення, закодоване з використанням порядку байтів у порядку байтів) визначає розмір даних фрагмента, не враховуючи 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 є хибним, розмір блоку вважається таким, що має порядок кінців від маленького. Це потрібно для аудіофайлів 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 від’ємний або пропущений, читайте всі дані до кінця блоку. Порожній байтовий об’єкт повертається, коли відразу зустрічається кінець блоку.
-
Виноски
- 1
«EA IFF 85» Стандарт для файлів формату обміну, Джеррі Моррісон, Electronic Arts, січень 1985 р.