使用 python 读取非 XML 格式的 plist 文件
read plist files in non-XML format using python
我正在读取 plist(正确列表)格式的 MacOS 数据,这些数据不是 XML 格式,不是二进制格式,而是其他 ascii 格式。例如:
addr= {
City = "San Francisco Bay Area";
}
我正在尝试将其解析为 Python 字典。不幸的是,plistlib.loads
returns InvalidFileException()
当我尝试解析它时:
import plistlib
plist=b"""
addr= {
City = "San Francisco Bay Area";
}
"""
print( plistlib.loads( plist ) )
生产:
Traceback (most recent call last):
File "x.py", line 9, in <module>
print( plistlib.loads( plist ) )
File "/Users/simsong/anaconda/lib/python3.6/plistlib.py", line 1024, in loads
fp, fmt=fmt, use_builtin_types=use_builtin_types, dict_type=dict_type)
File "/Users/simsong/anaconda/lib/python3.6/plistlib.py", line 1009, in load
raise InvalidFileException()
plistlib.InvalidFileException: Invalid file
正确的做法是什么?
你说的是 JSON 格式的 plist 文件。你的例子不是JSON。
让我们从这个开始sample plist in XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="1.0">
<dict>
<key>Author</key>
<string>William Shakespeare</string>
<key>Lines</key>
<array>
<string>It is a tale told by an idiot,</string>
<string>Full of sound and fury, signifying nothing.</string>
</array>
<key>Birthdate</key>
<integer>1564</integer>
</dict>
</plist>
并将其转换为JSON格式:
plutil -convert json sample.plist
{"Author":"William Shakespeare","Birthdate":1564,"Lines":["It is a tale told by an idiot,","Full of sound and fury, signifying nothing."]}
现在您可以使用 JSON 库阅读此内容。
import json
plist_text = '{"Author":"William Shakespeare","Birthdate":1564,"Lines":["It is a tale told by an idiot,","Full of sound and fury, signifying nothing."]}'
plist = json.loads(plist_text)
print('The author is ' + plist['Author'])
输出:
$ python3 plist.py
$ The author is William Shakespeare
我正在读取 plist(正确列表)格式的 MacOS 数据,这些数据不是 XML 格式,不是二进制格式,而是其他 ascii 格式。例如:
addr= {
City = "San Francisco Bay Area";
}
我正在尝试将其解析为 Python 字典。不幸的是,plistlib.loads
returns InvalidFileException()
当我尝试解析它时:
import plistlib
plist=b"""
addr= {
City = "San Francisco Bay Area";
}
"""
print( plistlib.loads( plist ) )
生产:
Traceback (most recent call last):
File "x.py", line 9, in <module>
print( plistlib.loads( plist ) )
File "/Users/simsong/anaconda/lib/python3.6/plistlib.py", line 1024, in loads
fp, fmt=fmt, use_builtin_types=use_builtin_types, dict_type=dict_type)
File "/Users/simsong/anaconda/lib/python3.6/plistlib.py", line 1009, in load
raise InvalidFileException()
plistlib.InvalidFileException: Invalid file
正确的做法是什么?
你说的是 JSON 格式的 plist 文件。你的例子不是JSON。
让我们从这个开始sample plist in XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="1.0">
<dict>
<key>Author</key>
<string>William Shakespeare</string>
<key>Lines</key>
<array>
<string>It is a tale told by an idiot,</string>
<string>Full of sound and fury, signifying nothing.</string>
</array>
<key>Birthdate</key>
<integer>1564</integer>
</dict>
</plist>
并将其转换为JSON格式:
plutil -convert json sample.plist
{"Author":"William Shakespeare","Birthdate":1564,"Lines":["It is a tale told by an idiot,","Full of sound and fury, signifying nothing."]}
现在您可以使用 JSON 库阅读此内容。
import json
plist_text = '{"Author":"William Shakespeare","Birthdate":1564,"Lines":["It is a tale told by an idiot,","Full of sound and fury, signifying nothing."]}'
plist = json.loads(plist_text)
print('The author is ' + plist['Author'])
输出:
$ python3 plist.py
$ The author is William Shakespeare