Python嵌套Plist读写

Posted

技术标签:

【中文标题】Python嵌套Plist读写【英文标题】:Python nested Plist reading and writing 【发布时间】:2017-09-22 22:31:42 【问题描述】:

我有一个包含许多子节点的 plist。我似乎无法找到一种方法来深入访问这些节点,并且只能取出该层。所以在下面,我想得到测试人员的号码。我可以打电话

plist['Title']['Set']['Notes']['Tester']

但这会给我所有的测试仪键以及键“Param”和字符串“WUT”。我需要对所有这些(并且有很多)进行索引,并且它们因文件而异。

<key>Title</key>
<dict>
  <key>Set</key>
  <dict>
    <key>Notes</key>
    <dict>
      <key>Tester</key>
      <array>
        <dict>
          <key>13</key>
          <dict>
            <key>Param</key>
            <array>
              <string>WUT</string>
            </array>
          </dict>
        </dict>
        <dict>
          <key>82</key>
          <dict>
            <key>Param</key>
            <array>
              <string>WUT</string>
            </array>
          </dict>
        </dict>
        <dict>
          <key>64</key>
          <dict>
            <key>Param</key>
            <array>
              <string>WUT</string>
            </array>
          </dict>
        </dict>

理想情况下,我想在数组中获取值 [13, 82, 64]。

作为旁注,我知道我可以通过 xml.etree.ElementTree 库执行此操作并运行

plist[0][11][3][1][2][1][x][0].text

并使用 for 循环运行,但对于我目前正在做的事情,plist 包更易于使用。

【问题讨论】:

【参考方案1】:

你已经很接近了。您可以使用dict.keys() 方法获取这些测试仪密钥。

tester_keys = list(plist['Title']['Set']['Notes']['Tester'].keys())

dict.keys() 返回一个序列,其中包含字典中的键(在您的情况下为数字)。然后使用list() 将此序列转换为列表。

【讨论】:

哈哈!成功!感谢您的帮助!有序对象是否可能发生同样的事情? .objects() .objs .obj 没有工作 ;)

以上是关于Python嵌套Plist读写的主要内容,如果未能解决你的问题,请参考以下文章

有没有可以读写plist文件的Java库,包括二进制格式?

数据持久化tableView问题iPhone(读写plist)

MongoDB ETL嵌套文档的读写

NSArray文件读写

求 C++读写取XML 文件方法!网上复制的让开

Python文件读写