我试图用python修改plist文件。我把一个plist从我的图书馆复制到我的桌面上安全地玩它。我导入了os
和plistlib
。我在跟踪我在documentation here中看到的内容。在
import plistlib
import os
test_prefs = "~/Desktop/com.apple.Safari.plist"
x = readPlist(os.path.expanduser(test_prefs))
print x["TopSitesGridArrangement"]
但这失败了。我做错什么了?在
我得到的确切错误是:
^{pr2}$当我将它改为x = plistlib.readPlist(os.path.expanduser(test_prefs))
时,我得到的错误如下(我的文件名被调用销毁.py)公司名称:
Traceback (most recent call last):
File "/Users/Josh/Desktop/destroy.py", line 11, in <module>
x = plistlib.readPlist(os.path.expanduser(test_prefs))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plistlib.py", line 78, in readPlist
rootObject = p.parse(pathOrFile)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plistlib.py", line 406, in parse
parser.ParseFile(fileobj)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 8
不应该是
x = plistlib.readPlist(os.path.expanduser(test_prefs))
?在问题是Safari的plist文件实际上是一种二进制plist文件格式,内置的
plistlib
无法读取。但是,biplist可以读取这些文件(需要安装):或者,可以使用^{} 首先将二进制plist格式转换为xml格式,然后使用
^{pr2}$plistlib
读取它:这条线:
创建一个名称空间
plistlib
,其中存储了它的所有对象,以避免重击自己的变量名。在要访问函数
^{pr2}$readPlist
,您需要使用点符号来访问plistlib.readPlist
:另一种方法是,您可以使用以下语法将所需内容带入全局空间:
相关问题 更多 >
编程相关推荐