Python plistlib on OS X 附加而不是覆盖

Python plistlib on OS X appending instead of overwriting

为非惯用语道歉Python;欢迎更正,但这不是我的主要问题。

我正在使用 plistlib 更新应用程序包内 Info.plist 文件中的密钥。据我所知,从 Python 的角度来看,应用程序包只是一个名为 "something.app" 的目录。不过,我遇到了一个问题,调用 plistlib.load(fp) 然后更新密钥然后 plistlib.dump(plist, fp) 将整个 plist 文件的 XML 内容附加到现有的文件,所以我最终得到一个文件,里面有两棵完整的 XML 树。

这是代码:

    with open(plistPath, 'r+b') as fp:
       plistRoot = plistlib.load(fp)
       plistRoot["CFBundleIdentifier"] = newBundleId
       plistlib.dump(plistRoot, fp)

我想我总是可以关闭文件上下文,删除文件,然后打开一个同名的新文件并写入,但似乎没有必要这样做。

通过使用第二个 with-as 语句重新打开文件来解决。