我正在尝试使用python修改plist文件.我将一个plist从我的库中复制到我的桌面上,以便安全地玩它.我已经导入os和plistlib.我正按照我在这里的文档中看到的内容.
import plistlib
import os
test_prefs = "~/Desktop/com.apple.Safari.plist"
x = readPlist(os.path.expanduser(test_prefs))
print x["TopSitesGridArrangement"]
Run Code Online (Sandbox Code Playgroud)
但这失败了.我究竟做错了什么?
我得到的确切错误:
Traceback (most recent call last):
File "/Users/Josh/Desktop/destroy.py", line 11, in <module>
x = readPlist(os.path.expanduser(test_prefs))
NameError: name 'readPlist' is not defined
Run Code Online (Sandbox Code Playgroud)
当我将其更改为x = plistlib.readPlist(os.path.expanduser(test_prefs))我得到的错误如下(我的文件名称为destroy.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
Run Code Online (Sandbox Code Playgroud)
Cla*_*diu 12
问题是Safari的plist文件实际上是二进制plist文件格式,内置plistlib无法读取.但是,biplist可以读取这些文件(需要安装):
>>> import biplist
>>> x = biplist.readPlist("com.apple.Safari.plist")
>>> x['LastOSVersionSafariWasLaunchedOn']
'10.9.1'
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用plutil首先将二进制plist格式转换为xml格式,然后使用plistlib以下命令读取它:
$ plutil -convert xml1 com.apple.Safari.plist
$ python
>>> import plistlib
>>> x = plistlib.readPlist("com.apple.Safari.plist")
>>> x['LastOSVersionSafariWasLaunchedOn']
'10.9.1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3580 次 |
| 最近记录: |