mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 23:14:06 +08:00
21 lines
23 KiB
HTML
21 lines
23 KiB
HTML
<div class="body" role="main"><div class="section" id="module-plistlib"><h1><span class="yiyi-st" id="yiyi-10">14.5. <a class="reference internal" href="#module-plistlib" title="plistlib: Generate and parse Mac OS X plist files."><code class="xref py py-mod docutils literal"><span class="pre">plistlib</span></code></a> - 生成并解析Mac OS X <code class="docutils literal"><span class="pre">.plist</span></code>文件</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/plistlib.py">Lib / plistlib.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块提供了一个用于读取和写入主要由Mac OS X使用的“属性列表”文件的接口,并支持二进制和XML plist文件。</span></p><p><span class="yiyi-st" id="yiyi-13">属性列表(<code class="docutils literal"><span class="pre">.plist</span></code>)文件格式是一个简单的序列化,支持基本的对象类型,如字典,列表,数字和字符串。</span><span class="yiyi-st" id="yiyi-14">通常顶层对象是字典。</span></p><p><span class="yiyi-st" id="yiyi-15">要写出和解析plist文件,请使用<a class="reference internal" href="#plistlib.dump" title="plistlib.dump"><code class="xref py py-func docutils literal"><span class="pre">dump()</span></code></a>和<a class="reference internal" href="#plistlib.load" title="plistlib.load"><code class="xref py py-func docutils literal"><span class="pre">load()</span></code></a>函数。</span></p><p><span class="yiyi-st" id="yiyi-16">要使用字节对象中的plist数据,请使用<a class="reference internal" href="#plistlib.dumps" title="plistlib.dumps"><code class="xref py py-func docutils literal"><span class="pre">dumps()</span></code></a>和<a class="reference internal" href="#plistlib.loads" title="plistlib.loads"><code class="xref py py-func docutils literal"><span class="pre">loads()</span></code></a>。</span></p><p><span class="yiyi-st" id="yiyi-17">值可以是字符串,整数,浮点数,布尔值,元组,列表,字典(但只有字符串键),<a class="reference internal" href="#plistlib.Data" title="plistlib.Data"><code class="xref py py-class docutils literal"><span class="pre">Data</span></code></a>,<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>,<code class="xref py py-class docutils literal"><span class="pre">bytesarray</span></code>或<a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime.datetime</span></code></a>对象。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-18"><span class="versionmodified">在版本3.4中已更改:</span>新的API,旧的API已弃用。</span><span class="yiyi-st" id="yiyi-19">支持二进制格式plists添加。</span></p></div><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-20">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-21"><a class="reference external" href="https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/plist.5.html">PList手册页</a></span></dt><dd><span class="yiyi-st" id="yiyi-22">苹果的文件格式文件。</span></dd></dl></div><p><span class="yiyi-st" id="yiyi-23">该模块定义了以下功能:</span></p><dl class="function"><dt id="plistlib.load"><span class="yiyi-st" id="yiyi-24"> <code class="descclassname">plistlib.</code><code class="descname">load</code><span class="sig-paren">(</span><em>fp</em>, <em>*</em>, <em>fmt=None</em>, <em>use_builtin_types=True</em>, <em>dict_type=dict</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-25">读取plist文件。</span><span class="yiyi-st" id="yiyi-26"><em>fp</em>应该是一个可读的二进制文件对象。</span><span class="yiyi-st" id="yiyi-27">返回解包的根对象(通常是字典)。</span></p><p><span class="yiyi-st" id="yiyi-28"><em>fmt</em>是文件的格式,以下值有效:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-29"><a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-data docutils literal"><span class="pre">None</span></code></a>:自动检测文件格式</span></li><li><span class="yiyi-st" id="yiyi-30"><a class="reference internal" href="#plistlib.FMT_XML" title="plistlib.FMT_XML"><code class="xref py py-data docutils literal"><span class="pre">FMT_XML</span></code></a>:XML文件格式</span></li><li><span class="yiyi-st" id="yiyi-31"><a class="reference internal" href="#plistlib.FMT_BINARY" title="plistlib.FMT_BINARY"><code class="xref py py-data docutils literal"><span class="pre">FMT_BINARY</span></code></a>:二进制plist格式</span></li></ul><p><span class="yiyi-st" id="yiyi-32">如果<em>use_builtin_types</em>为true(默认值),二进制数据将作为<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>的实例返回,否则返回为<a class="reference internal" href="#plistlib.Data" title="plistlib.Data"><code class="xref py py-class docutils literal"><span class="pre">Data</span></code></a>的实例。</span></p><p><span class="yiyi-st" id="yiyi-33"><em>dict_type</em>是用于从plist文件读取的字典的类型。</span><span class="yiyi-st" id="yiyi-34">plist的确切结构可以通过使用<a class="reference internal" href="collections.html#collections.OrderedDict" title="collections.OrderedDict"><code class="xref py py-class docutils literal"><span class="pre">collections.OrderedDict</span></code></a>(虽然键的顺序在plist文件中不重要)来恢复。</span></p><p><span class="yiyi-st" id="yiyi-35"><a class="reference internal" href="#plistlib.FMT_XML" title="plistlib.FMT_XML"><code class="xref py py-data docutils literal"><span class="pre">FMT_XML</span></code></a>格式的XML数据使用<a class="reference internal" href="pyexpat.html#module-xml.parsers.expat" title="xml.parsers.expat: An interface to the Expat non-validating XML parser."><code class="xref py py-mod docutils literal"><span class="pre">xml.parsers.expat</span></code></a>中的Expat解析器解析 - 请参阅其文档,了解可能的异常XML格式的异常。</span><span class="yiyi-st" id="yiyi-36">未知的元素将被plist解析器简单地忽略。</span></p><p><span class="yiyi-st" id="yiyi-37">当文件无法解析时,二进制格式的解析器引发<code class="xref py py-exc docutils literal"><span class="pre">InvalidFileException</span></code>。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-38"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><dl class="function"><dt id="plistlib.loads"><span class="yiyi-st" id="yiyi-39"> <code class="descclassname">plistlib.</code><code class="descname">loads</code><span class="sig-paren">(</span><em>data</em>, <em>*</em>, <em>fmt=None</em>, <em>use_builtin_types=True</em>, <em>dict_type=dict</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-40">从字节对象加载plist。</span><span class="yiyi-st" id="yiyi-41">有关关键字参数的说明,请参见<a class="reference internal" href="#plistlib.load" title="plistlib.load"><code class="xref py py-func docutils literal"><span class="pre">load()</span></code></a>。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-42"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><dl class="function"><dt id="plistlib.dump"><span class="yiyi-st" id="yiyi-43"> <code class="descclassname">plistlib.</code><code class="descname">dump</code><span class="sig-paren">(</span><em>value</em>, <em>fp</em>, <em>*</em>, <em>fmt=FMT_XML</em>, <em>sort_keys=True</em>, <em>skipkeys=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-44">将<em>值</em>写入plist文件。</span><span class="yiyi-st" id="yiyi-45"><em>Fp</em>应为可写二进制文件对象。</span></p><p><span class="yiyi-st" id="yiyi-46"><em>fmt</em>参数指定plist文件的格式,可以是以下值之一:</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-47"><a class="reference internal" href="#plistlib.FMT_XML" title="plistlib.FMT_XML"><code class="xref py py-data docutils literal"><span class="pre">FMT_XML</span></code></a>:XML格式化plist文件</span></li><li><span class="yiyi-st" id="yiyi-48"><a class="reference internal" href="#plistlib.FMT_BINARY" title="plistlib.FMT_BINARY"><code class="xref py py-data docutils literal"><span class="pre">FMT_BINARY</span></code></a>:二进制格式化plist文件</span></li></ul><p><span class="yiyi-st" id="yiyi-49">当<em>sort_keys</em>为true(默认值)时,字典的键将以排序顺序写入plist,否则它们将以字典的迭代顺序写入。</span></p><p><span class="yiyi-st" id="yiyi-50">当字典的键不是字符串时,当<em>skipkeys</em>为false(默认)时,函数引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>,否则将跳过此类键。</span></p><p><span class="yiyi-st" id="yiyi-51">如果对象是不受支持的类型或包含不受支持类型的对象的容器,则会引发<a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a>。</span></p><p><span class="yiyi-st" id="yiyi-52">对于不能在(二进制)plist文件中表示的整数值,将会引发<a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal"><span class="pre">OverflowError</span></code></a>。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-53"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><dl class="function"><dt id="plistlib.dumps"><span class="yiyi-st" id="yiyi-54"> <code class="descclassname">plistlib.</code><code class="descname">dumps</code><span class="sig-paren">(</span><em>value</em>, <em>*</em>, <em>fmt=FMT_XML</em>, <em>sort_keys=True</em>, <em>skipkeys=False</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-55">将<em>值</em>返回为plist格式的字节对象。</span><span class="yiyi-st" id="yiyi-56">有关此函数的关键字参数的说明,请参阅<a class="reference internal" href="#plistlib.dump" title="plistlib.dump"><code class="xref py py-func docutils literal"><span class="pre">dump()</span></code></a>的文档。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-57"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-58">以下函数已弃用:</span></p><dl class="function"><dt id="plistlib.readPlist"><span class="yiyi-st" id="yiyi-59"> <code class="descclassname">plistlib.</code><code class="descname">readPlist</code><span class="sig-paren">(</span><em>pathOrFile</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-60">读取plist文件。</span><span class="yiyi-st" id="yiyi-61"><em>pathOrFile</em>可以是文件名或(可读和二进制)文件对象。</span><span class="yiyi-st" id="yiyi-62">返回解包的根对象(通常是字典)。</span></p><p><span class="yiyi-st" id="yiyi-63">此函数调用<a class="reference internal" href="#plistlib.load" title="plistlib.load"><code class="xref py py-func docutils literal"><span class="pre">load()</span></code></a>进行实际工作,有关<a class="reference internal" href="#plistlib.load" title="plistlib.load"><code class="xref py py-func docutils literal"><span class="pre">that</span> <span class="pre">function</span></code></a>关键字参数。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-64">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-65">结果中的Dict值具有延迟到<code class="docutils literal"><span class="pre">__getitem_</span></code>的<code class="docutils literal"><span class="pre">__getattr__</span></code>方法。</span><span class="yiyi-st" id="yiyi-66">这意味着您可以使用属性访问来访问这些字典的项目。</span></p></div><div class="deprecated"><p><span class="yiyi-st" id="yiyi-67"><span class="versionmodified">自3.4版起已弃用:</span>改用<a class="reference internal" href="#plistlib.load" title="plistlib.load"><code class="xref py py-func docutils literal"><span class="pre">load()</span></code></a>。</span></p></div></dd></dl><dl class="function"><dt id="plistlib.writePlist"><span class="yiyi-st" id="yiyi-68"> <code class="descclassname">plistlib.</code><code class="descname">writePlist</code><span class="sig-paren">(</span><em>rootObject</em>, <em>pathOrFile</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-69">将<em>rootObject</em>写入XML plist文件。</span><span class="yiyi-st" id="yiyi-70"><em>pathOrFile</em>可以是文件名或(可写和二进制)文件对象</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-71"><span class="versionmodified">自3.4版起已弃用:</span>改用<a class="reference internal" href="#plistlib.dump" title="plistlib.dump"><code class="xref py py-func docutils literal"><span class="pre">dump()</span></code></a>。</span></p></div></dd></dl><dl class="function"><dt id="plistlib.readPlistFromBytes"><span class="yiyi-st" id="yiyi-72"> <code class="descclassname">plistlib.</code><code class="descname">readPlistFromBytes</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-73">从字节对象读取plist数据。</span><span class="yiyi-st" id="yiyi-74">返回根对象。</span></p><p><span class="yiyi-st" id="yiyi-75">有关关键字参数的说明,请参见<a class="reference internal" href="#plistlib.load" title="plistlib.load"><code class="xref py py-func docutils literal"><span class="pre">load()</span></code></a>。</span></p><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-76">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-77">结果中的Dict值具有延迟到<code class="docutils literal"><span class="pre">__getitem_</span></code>的<code class="docutils literal"><span class="pre">__getattr__</span></code>方法。</span><span class="yiyi-st" id="yiyi-78">这意味着您可以使用属性访问来访问这些字典的项目。</span></p></div><div class="deprecated"><p><span class="yiyi-st" id="yiyi-79"><span class="versionmodified">自3.4版起已弃用:</span>改用<a class="reference internal" href="#plistlib.loads" title="plistlib.loads"><code class="xref py py-func docutils literal"><span class="pre">loads()</span></code></a>。</span></p></div></dd></dl><dl class="function"><dt id="plistlib.writePlistToBytes"><span class="yiyi-st" id="yiyi-80"> <code class="descclassname">plistlib.</code><code class="descname">writePlistToBytes</code><span class="sig-paren">(</span><em>rootObject</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-81">返回<em>rootObject</em>作为XML plist格式的字节对象。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-82"><span class="versionmodified">自版本3.4后已弃用:</span>改用<a class="reference internal" href="#plistlib.dumps" title="plistlib.dumps"><code class="xref py py-func docutils literal"><span class="pre">dumps()</span></code></a>。</span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-83">以下类可用:</span></p><dl class="class"><dt><span class="yiyi-st" id="yiyi-84"><code class="descname">Dict([dict]):</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-85">返回与字典<em>dict</em>相同值的扩展映射对象。</span></p><p><span class="yiyi-st" id="yiyi-86">此类是<a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal"><span class="pre">dict</span></code></a>的子类,其中属性访问可用于访问项目。</span><span class="yiyi-st" id="yiyi-87">也就是说,<code class="docutils literal"><span class="pre">aDict.key</span></code>与在映射中获取,设置和删除项目的<code class="docutils literal"><span class="pre">aDict['key']</span></code>相同。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-88"><span class="versionmodified">自3.0版起已弃用。</span></span></p></div></dd></dl><dl class="class"><dt id="plistlib.Data"><span class="yiyi-st" id="yiyi-89"> <em class="property">class </em><code class="descclassname">plistlib.</code><code class="descname">Data</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-90">返回字节对象<em>数据</em>周围的“数据”包装器对象。</span><span class="yiyi-st" id="yiyi-91">这用在从/到plists转换以表示plist中可用的<code class="docutils literal"><span class="pre"><data></span></code>类型的函数中。</span></p><p><span class="yiyi-st" id="yiyi-92">它有一个属性,<code class="xref py py-attr docutils literal"><span class="pre">data</span></code>,可以用于检索存储在其中的Python字节对象。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-93"><span class="versionmodified">自版本3.4后已弃用:</span>改用<a class="reference internal" href="functions.html#bytes" title="bytes"><code class="xref py py-class docutils literal"><span class="pre">bytes</span></code></a>物件。</span></p></div></dd></dl><p><span class="yiyi-st" id="yiyi-94">以下常量可用:</span></p><dl class="data"><dt id="plistlib.FMT_XML"><span class="yiyi-st" id="yiyi-95"> <code class="descclassname">plistlib.</code><code class="descname">FMT_XML</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-96">plist文件的XML格式。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-97"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><dl class="data"><dt id="plistlib.FMT_BINARY"><span class="yiyi-st" id="yiyi-98"> <code class="descclassname">plistlib.</code><code class="descname">FMT_BINARY</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-99">plist文件的二进制格式</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-100"><span class="versionmodified">版本3.4中的新功能。</span></span></p></div></dd></dl><div class="section" id="examples"><h2><span class="yiyi-st" id="yiyi-101">14.5.1. </span><span class="yiyi-st" id="yiyi-102">Examples</span></h2><p><span class="yiyi-st" id="yiyi-103">生成plist:</span></p><pre><code class="language-python"><span></span><span class="n">pl</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||
<span class="n">aString</span> <span class="o">=</span> <span class="s2">"Doodah"</span><span class="p">,</span>
|
||
<span class="n">aList</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"A"</span><span class="p">,</span> <span class="s2">"B"</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mf">32.1</span><span class="p">,</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]],</span>
|
||
<span class="n">aFloat</span> <span class="o">=</span> <span class="mf">0.1</span><span class="p">,</span>
|
||
<span class="n">anInt</span> <span class="o">=</span> <span class="mi">728</span><span class="p">,</span>
|
||
<span class="n">aDict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||
<span class="n">anotherString</span> <span class="o">=</span> <span class="s2">"<hello & hi there!>"</span><span class="p">,</span>
|
||
<span class="n">aThirdString</span> <span class="o">=</span> <span class="s2">"M</span><span class="se">\xe4</span><span class="s2">ssig, Ma</span><span class="se">\xdf</span><span class="s2">"</span><span class="p">,</span>
|
||
<span class="n">aTrueValue</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
|
||
<span class="n">aFalseValue</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
||
<span class="p">),</span>
|
||
<span class="n">someData</span> <span class="o">=</span> <span class="n">b</span><span class="s2">"<binary gunk>"</span><span class="p">,</span>
|
||
<span class="n">someMoreData</span> <span class="o">=</span> <span class="n">b</span><span class="s2">"<lots of binary gunk>"</span> <span class="o">*</span> <span class="mi">10</span><span class="p">,</span>
|
||
<span class="n">aDate</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">mktime</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">gmtime</span><span class="p">())),</span>
|
||
<span class="p">)</span>
|
||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fp</span><span class="p">:</span>
|
||
<span class="n">dump</span><span class="p">(</span><span class="n">pl</span><span class="p">,</span> <span class="n">fp</span><span class="p">)</span>
|
||
</code></pre><p><span class="yiyi-st" id="yiyi-104">解析plist:</span></p><pre><code class="language-python"><span></span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">fp</span><span class="p">:</span>
|
||
<span class="n">pl</span> <span class="o">=</span> <span class="n">load</span><span class="p">(</span><span class="n">fp</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">pl</span><span class="p">[</span><span class="s2">"aKey"</span><span class="p">])</span>
|
||
</code></pre></div></div></div> |