mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
1 line
10 KiB
HTML
1 line
10 KiB
HTML
<div class="body" role="main"><div class="section" id="module-chunk"><h1><span class="yiyi-st" id="yiyi-10">22.5. <a class="reference internal" href="#module-chunk" title="chunk: Module to read IFF chunks."><code class="xref py py-mod docutils literal"><span class="pre">chunk</span></code></a> - 读取IFF分块数据</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/chunk.py">Lib / chunk.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块提供用于读取使用EA IFF 85块的文件的接口。</span><span class="yiyi-st" id="yiyi-13"><a class="footnote-reference" href="#id2" id="id1">[1]</a>此格式至少用于音频交换文件格式(AIFF / AIFF-C)和真实媒体文件格式(RMFF)。</span><span class="yiyi-st" id="yiyi-14">WAVE音频文件格式是密切相关的,也可以使用此模块读取。</span></p><p><span class="yiyi-st" id="yiyi-15">块具有以下结构:</span></p><table border="1" class="docutils"><thead valign="bottom"><tr class="row-odd"><th class="head"><span class="yiyi-st" id="yiyi-16">抵消</span></th><th class="head"><span class="yiyi-st" id="yiyi-17">长度</span></th><th class="head"><span class="yiyi-st" id="yiyi-18">内容</span></th></tr></thead><tbody valign="top"><tr class="row-even"><td><span class="yiyi-st" id="yiyi-19">0</span></td><td><span class="yiyi-st" id="yiyi-20">4</span></td><td><span class="yiyi-st" id="yiyi-21">块ID</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-22">4</span></td><td><span class="yiyi-st" id="yiyi-23">4</span></td><td><span class="yiyi-st" id="yiyi-24">块大小按big-endian字节顺序,不包括头</span></td></tr><tr class="row-even"><td><span class="yiyi-st" id="yiyi-25">8</span></td><td><span class="yiyi-st" id="yiyi-26"><em>n</em></span></td><td><span class="yiyi-st" id="yiyi-27">数据字节,其中<em>n</em>是前面字段中给出的大小</span></td></tr><tr class="row-odd"><td><span class="yiyi-st" id="yiyi-28">8 + <em>n</em></span></td><td><span class="yiyi-st" id="yiyi-29">0或1</span></td><td><span class="yiyi-st" id="yiyi-30">如果<em>n</em>为奇数且使用块对齐,则需要填充字节</span></td></tr></tbody></table><p><span class="yiyi-st" id="yiyi-31">ID是一个4字节的字符串,用于标识块的类型。</span></p><p><span class="yiyi-st" id="yiyi-32">大小字段(32位值,使用大端字节顺序编码)给出了块数据的大小,不包括8字节头。</span></p><p><span class="yiyi-st" id="yiyi-33">通常,IFF类型的文件由一个或多个块组成。</span><span class="yiyi-st" id="yiyi-34">这里定义的<a class="reference internal" href="#chunk.Chunk" title="chunk.Chunk"><code class="xref py py-class docutils literal"><span class="pre">Chunk</span></code></a>类的建议用法是在每个块的开始处实例化一个实例,并从实例读取直到它到达结束,之后可以实例化一个新的实例。</span><span class="yiyi-st" id="yiyi-35">在文件结束时,创建新的实例将失败并出现<a class="reference internal" href="exceptions.html#EOFError" title="EOFError"><code class="xref py py-exc docutils literal"><span class="pre">EOFError</span></code></a>异常。</span></p><dl class="class"><dt id="chunk.Chunk"><span class="yiyi-st" id="yiyi-36"> <em class="property">class </em><code class="descclassname">chunk.</code><code class="descname">Chunk</code><span class="sig-paren">(</span><em>file</em>, <em>align=True</em>, <em>bigendian=True</em>, <em>inclheader=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-37">表示块的类。</span><span class="yiyi-st" id="yiyi-38"><em>文件</em>参数应为类文件对象。</span><span class="yiyi-st" id="yiyi-39">这个类的实例是特别允许的。</span><span class="yiyi-st" id="yiyi-40">唯一需要的方法是<code class="xref py py-meth docutils literal"><span class="pre">read()</span></code>。</span><span class="yiyi-st" id="yiyi-41">如果方法<a class="reference internal" href="io.html#io.IOBase.seek" title="io.IOBase.seek"><code class="xref py py-meth docutils literal"><span class="pre">seek()</span></code></a>和<a class="reference internal" href="io.html#io.IOBase.tell" title="io.IOBase.tell"><code class="xref py py-meth docutils literal"><span class="pre">tell()</span></code></a>存在,并且不引发异常,它们也被使用。</span><span class="yiyi-st" id="yiyi-42">如果这些方法存在并引发异常,它们将不会改变对象。</span><span class="yiyi-st" id="yiyi-43">如果可选参数<em>align</em>为真,则假定块在2字节边界对齐。</span><span class="yiyi-st" id="yiyi-44">如果<em>align</em>为false,则不进行对齐。</span><span class="yiyi-st" id="yiyi-45">默认值为true。</span><span class="yiyi-st" id="yiyi-46">如果可选参数<em>bigendian</em>为假,则块大小假定为小端顺序。</span><span class="yiyi-st" id="yiyi-47">这是WAVE音频文件所需要的。</span><span class="yiyi-st" id="yiyi-48">默认值为true。</span><span class="yiyi-st" id="yiyi-49">如果可选参数<em>inclheader</em>为真,则块头中给出的大小包括头的大小。</span><span class="yiyi-st" id="yiyi-50">默认值为false。</span></p><p><span class="yiyi-st" id="yiyi-51"><a class="reference internal" href="#chunk.Chunk" title="chunk.Chunk"><code class="xref py py-class docutils literal"><span class="pre">Chunk</span></code></a>对象支持以下方法:</span></p><dl class="method"><dt id="chunk.Chunk.getname"><span class="yiyi-st" id="yiyi-52"> <code class="descname">getname</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">返回块的名称(ID)。</span><span class="yiyi-st" id="yiyi-54">这是块的前4个字节。</span></p></dd></dl><dl class="method"><dt id="chunk.Chunk.getsize"><span class="yiyi-st" id="yiyi-55"> <code class="descname">getsize</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-56">返回块的大小。</span></p></dd></dl><dl class="method"><dt id="chunk.Chunk.close"><span class="yiyi-st" id="yiyi-57"> <code class="descname">close</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-58">关闭并跳到块的结尾。</span><span class="yiyi-st" id="yiyi-59">这不会关闭底层文件。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-60">如果在<a class="reference internal" href="#chunk.Chunk.close" title="chunk.Chunk.close"><code class="xref py py-meth docutils literal"><span class="pre">close()</span></code></a>方法被调用后调用,剩余的方法将引发<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>。</span><span class="yiyi-st" id="yiyi-61">在Python 3.3之前,他们习惯于引发<a class="reference internal" href="exceptions.html#IOError" title="IOError"><code class="xref py py-exc docutils literal"><span class="pre">IOError</span></code></a>,现在是<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>的别名。</span></p><dl class="method"><dt id="chunk.Chunk.isatty"><span class="yiyi-st" id="yiyi-62"> <code class="descname">isatty</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-63">返回<code class="docutils literal"><span class="pre">False</span></code>。</span></p></dd></dl><dl class="method"><dt id="chunk.Chunk.seek"><span class="yiyi-st" id="yiyi-64"> <code class="descname">seek</code><span class="sig-paren">(</span><em>pos</em>, <em>whence=0</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-65">设置块的当前位置。</span><span class="yiyi-st" id="yiyi-66"><em>whence</em>参数是可选的,默认为<code class="docutils literal"><span class="pre">0</span></code>(绝对文件定位);其他值为<code class="docutils literal"><span class="pre">1</span></code>(相对于当前位置寻找)和<code class="docutils literal"><span class="pre">2</span></code>(相对于文件末尾寻找)。</span><span class="yiyi-st" id="yiyi-67">没有返回值。</span><span class="yiyi-st" id="yiyi-68">如果底层文件不允许seek,只允许前向寻道。</span></p></dd></dl><dl class="method"><dt id="chunk.Chunk.tell"><span class="yiyi-st" id="yiyi-69"> <code class="descname">tell</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-70">将当前位置返回到块中。</span></p></dd></dl><dl class="method"><dt id="chunk.Chunk.read"><span class="yiyi-st" id="yiyi-71"> <code class="descname">read</code><span class="sig-paren">(</span><em>size=-1</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-72">从块中读取最多<em>size</em>个字节(如果读取在获取<em>大小</em>字节之前命中块的末尾,则减少)。</span><span class="yiyi-st" id="yiyi-73">如果<em>size</em>参数为负或省略,读取所有数据,直到块的结束。</span><span class="yiyi-st" id="yiyi-74">当立即遇到块的结尾时,返回一个空字节对象。</span></p></dd></dl><dl class="method"><dt id="chunk.Chunk.skip"><span class="yiyi-st" id="yiyi-75"> <code class="descname">skip</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-76">跳到块的结尾。</span><span class="yiyi-st" id="yiyi-77">所有对<a class="reference internal" href="#chunk.Chunk.read" title="chunk.Chunk.read"><code class="xref py py-meth docutils literal"><span class="pre">read()</span></code></a>的调用将返回<code class="docutils literal"><span class="pre">b''</span></code>。</span><span class="yiyi-st" id="yiyi-78">如果你对块的内容不感兴趣,应该调用这个方法,以便文件指向下一个块的开始。</span></p></dd></dl></dd></dl><p class="rubric"><span class="yiyi-st" id="yiyi-79">脚注</span></p><table class="docutils footnote" frame="void" id="id2" rules="none"><tbody valign="top"><tr><td class="label"><span class="yiyi-st" id="yiyi-80"><a class="fn-backref" href="#id1">[1]</a></span></td><td><span class="yiyi-st" id="yiyi-81">“EA IFF 85”交换格式文件标准,Jerry Morrison,Electronic Arts,1985年1月。</span></td></tr></tbody></table></div></div> |