plistlib无法读取Safari的plist fi

2024-05-15 02:57:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python修改plist文件。我把一个plist从我的图书馆复制到我的桌面上安全地玩它。我导入了osplistlib。我在跟踪我在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

Tags: pathinpytestimportos错误line
3条回答

不应该是x = plistlib.readPlist(os.path.expanduser(test_prefs))?在

问题是Safari的plist文件实际上是一种二进制plist文件格式,内置的plistlib无法读取。但是,biplist可以读取这些文件(需要安装):

>>> import biplist
>>> x = biplist.readPlist("com.apple.Safari.plist")
>>> x['LastOSVersionSafariWasLaunchedOn']
'10.9.1'

或者,可以使用^{}首先将二进制plist格式转换为xml格式,然后使用plistlib读取它:

^{pr2}$

这条线:

import plistlib

创建一个名称空间plistlib,其中存储了它的所有对象,以避免重击自己的变量名。在

要访问函数readPlist,您需要使用点符号来访问plistlib.readPlist

^{pr2}$

另一种方法是,您可以使用以下语法将所需内容带入全局空间:

from plistlib import readPlist, writePlist  # and anything else...

相关问题 更多 >

    热门问题