22.5. chunk
—读取IFF分块数据¶
源代码: Lib/chunk.py
此模块提供用于读取使用EA IFF 85块的文件的接口。 [1] 此格式至少用于音频交换文件格式(AIFF/AIFF-C)和真实媒体文件格式(RMFF)。 WAVE音频文件格式是密切相关的,也可以使用此模块读取。
块具有以下结构:
抵消 |
长度 |
内容 |
---|---|---|
0 |
4 |
块ID |
4 |
4 |
块大小按big-endian字节顺序,不包括头 |
8 |
n |
数据字节,其中 n 是前一字段中给出的大小 |
8 + n |
0或1 |
如果 n 为奇数并且使用块对齐,则需要填充字节 |
ID是一个4字节的字符串,用于标识块的类型。
大小字段(32位值,使用大尾数字节顺序编码)给出了块数据的大小,不包括8字节头。
通常,IFF类型的文件由一个或多个块组成。这里定义的 Chunk
类的建议使用是在每个块的开始处实例化一个实例,并从实例中读取,直到它到达结束,之后可以实例化一个新的实例。在文件结尾处,创建新实例将失败并出现 EOFError
异常。
-
class
chunk.
Chunk
(file, align=True, bigendian=True, inclheader=False)¶ 表示一个块的类。 file 参数应该是一个类文件对象。特别允许这个类的实例。唯一需要的方法是
read()
。如果方法seek()
和tell()
存在并且不引起异常,也使用它们。如果这些方法存在并引发异常,则它们不会改变对象。如果可选参数 align 为真,则假定块在2字节边界上对齐。如果 align 为假,则不假定对齐。默认值为true。如果可选参数 bigendian 为假,则块大小假定为小端顺序。这是WAVE音频文件所需要的。默认值为true。如果可选参数 inclheader 为真,则块头中给出的大小包括头的大小。默认值为false。Chunk
对象支持以下方法:-
getname
()¶ 返回块的名称(ID)。这是块的前4个字节。
-
getsize
()¶ 返回块的大小。
-
close
()¶ 关闭并跳到块的结尾。这不会关闭底层文件。
如果在调用
close()
方法后调用,剩余的方法将引发OSError
。在Python 3.3之前,他们习惯于提高IOError
,现在是OSError
的别名。-
isatty
()¶ 返回
False
。
-
seek
(pos, whence=0)¶ 设置块的当前位置。 whence 参数是可选的,默认为
0
(绝对文件定位);其他值是1
(相对于当前位置的搜索)和2
(相对于文件的结尾搜索)。没有返回值。如果底层文件不允许seek,则只允许前向寻道。
-
tell
()¶ 将当前位置返回到块。
-
read
(size=-1)¶ 从块中读取最多 size 个字节(如果读取在获取 size 字节之前命中块的末尾,则更少)。如果 size 参数为负或省略,请读取所有数据,直到块的结尾。当立即遇到块的结尾时,返回一个空字节对象。
-
脚注
[1] | “EA IFF 85”Standard for Interchange Format Files,Jerry Morrison,Electronic Arts,1985年1月。 |