在Python中修改plist

时间:2012-06-12 14:58:49

标签: python plist

使用plistlib,我可以将字典/列表结构序列化为plist。这个工作正常,我也可以用同一个库读回来。

问题是字典的类型为“_internalDict”,我似乎无法更改它们。例如:

d = plistlib.readPlist('someplist.plist')
v = d['value'] # v is an _internalDict
v['val'] = 'new val' # works
del v # doesn't work
v = {'someotherkey': 'someothervalue'} # doesn't work either

plist似乎没有变化。帮助

1 个答案:

答案 0 :(得分:3)

您需要从d词典中删除密钥:

del d['value']

通过设置v = d['value'],您只创建一个与d['value']指向相同值的新变量,但删除v不会从父结构中删除该字典。

要完全替换dict,您需要再次操作父dict:

d['value'] = { 'foo': 'bar' }

如果执行v = { ... }您正在做的是将新dict值的引用分配给变量v,请将引用替换为d['value'] {{1 }};你没有操纵dict字典中的原始值。

d只是plistlib._InternalDict的一个子类,它为属性访问提供警告,现在已弃用;否则它就像常规dict类型一样。