chunk --- 讀取 IFF 分塊數(shù)據(jù)?

源代碼: Lib/chunk.py

Deprecated since version 3.11, will be removed in version 3.13: The chunk module is deprecated (see PEP 594 for details).


本模塊提供了一個讀取使用 EA IFF 85 分塊的數(shù)據(jù)的接口chunks. 1 這種格式使用的場合有 Audio Interchange File Format (AIFF/AIFF-C) 和 Real Media File Format (RMFF) 等。 與它們密切相關的 WAVE 音頻文件也可使用此模塊來讀取。

一個分塊具有以下結構:

偏移

長度

目錄

0

4

區(qū)塊ID

4

4

大端字節(jié)順序的塊大小,不包括頭

8

n

數(shù)據(jù)字節(jié),其中 n 是前一字段中給出的大小

8 + n

0 或 1

如果 n 為奇數(shù)且使用塊對齊,則需要填充字節(jié)

ID是一個4字節(jié)的字符串,用于標識塊的類型。

大小字段(32 位的值,使用大端字節(jié)序編碼)給出分塊數(shù)據(jù)的大小,不包括 8 字節(jié)的標頭。

使用由一個或更多分塊組成的 IFF 類型文件。 此處定義的 Chunk 類的建議使用方式是在每個分塊開始時實例化一個實例并從實例讀取直到其末尾,在那之后可以再實例化新的實例。 到達文件末尾時,創(chuàng)建新實例將會失敗并引發(fā) EOFError 異常。

class chunk.Chunk(file, align=True, bigendian=True, inclheader=False)?

代表一個分塊的類。 file 參數(shù)預期為一個文件類對象。 特別地也允許該類的實例。 唯一必需的方法是 read()。 如果存在 seek()tell() 方法并且沒有引發(fā)異常,它們也會被使用。 如果存在這些方法并且引發(fā)了異常,則它們不應改變目標對象。 如果可選參數(shù) align 為真值,則分塊應當以 2 字節(jié)邊界對齊。 如果 align 為假值,則不使用對齊。 此參數(shù)默認為真值。 如果可選參數(shù) bigendian 為假值,分塊大小應當為小端序。 這對于 WAVE 音頻文件是必須的。 此參數(shù)默認為真值。 如果可選參數(shù) inclheader 為真值,則分塊標頭中給出的大小將包括標頭的大小。 此參數(shù)默認為假值。

Chunk 對象支持下列方法:

getname()?

返回分塊的名稱(ID)。 這是分塊的頭 4 個字節(jié)。

getsize()?

返回分塊的大小。

close()?

關閉并跳轉到分塊的末尾。 這不會關閉下層的文件。

close() 方法已被調(diào)用后其余方法將會引發(fā) OSError。 在 Python 3.3 之前,它們曾會引發(fā) IOError,現(xiàn)在這是 OSError 的一個別名。

isatty()?

返回 False。

seek(pos, whence=0)?

設置分塊的當前位置。 whence 參數(shù)為可選項并且默認為 0 (絕對文件定位);其他值還有 1 (相對當前位置查找) 和 2 (相對文件末尾查找)。 沒有返回值。 如果下層文件不支持查找,則只允許向前查找。

tell()?

將當前位置返回到分塊。

read(size=- 1)?

從分塊讀取至多 size 個字節(jié)(如果在獲得 size 個字節(jié)之前已到達分塊末尾則讀取的字節(jié)會少于此數(shù)量)。 如果 size 參數(shù)為負值或被省略,則讀取所有字節(jié)直到分塊末尾。 當立即遇到分塊末尾則返回空字節(jié)串對象。

skip()?

跳到分塊末尾。此后對分塊再次調(diào)用 read() 將返回 b''。 如果你對分塊的內(nèi)容不感興趣,則應當調(diào)用此方法以使文件指向下一分塊的開頭。

備注

1

"EA IFF 85" 交換格式文件標準, Jerry Morrison, Electronic Arts, 1985 年 1 月。