Python使用plistlib生成plist文件时如何将字典插入另一字典
调整方案
你完全不需要修改现有生成patches列表的业务逻辑,仅需在最终组装plist根结构、写入文件之前加一层字典封装即可,改动量极小。
原代码逻辑参考(你现有代码大概率是这种写法)
import plistlib # ====== 以下现有逻辑完全不用动 ====== # 你原来生成patches列表的代码,输出为每个元素是补丁字典的列表 patches = [ {"Comment": "Patch 1", "Enabled": True, "Find": "xxxx", "Replace": "yyyy"}, {"Comment": "Patch 2", "Enabled": False, "Find": "aaaa", "Replace": "bbbb"} ] # ====== 以上现有逻辑完全不用动 ====== # 原组装Kernel节点的写法,导致patches每个元素直接作为Add的子项 kernel_config = { "Add": patches } root = {"Kernel": kernel_config} # 写入plist with open("config.plist", "wb") as f: plistlib.writePlist(root, f)
需要修改的部分
只需要调整Kernel节点中Add字段的赋值逻辑,把patches列表嵌套到你需要的外层字典中,再将外层字典作为单元素放入Add数组即可:
# 定义外层字典,把所有patches嵌套进去,外层字典的键名根据你需要的plist格式修改 patch_wrapper = { # 可以按需给外层字典加其他公共字段,比如Arch、Enabled之类的 "Arch": "x86_64", "Enabled": True, "Patches": patches # 把原有patches列表整体作为外层字典的一个键值 } # 修改Add的赋值,把外层字典放在单元素列表里 kernel_config = { "Add": [patch_wrapper] }
效果验证
- 原输出结构:
Kernel -> Add -> [补丁1字典, 补丁2字典, ...] - 调整后输出结构:
Kernel -> Add -> [外层字典 -> Patches -> [补丁1字典, 补丁2字典, ...]]
Python 2.7 plistlib注意事项
- 默认输出为XML格式plist,符合绝大多数场景的使用要求,如果需要二进制格式可以用
plistlib.writePlistToBytes转换后写入文件 - 生成后可以直接用Xcode或者
plutil命令校验格式合法性:plutil -lint config.plist
内容的提问来源于stack exchange,提问作者Floren
相关产品推荐
相关产品推荐

