14.5. plistlib
- 生成并解析Mac OS X .plist
文件¶
源代码: Lib / plistlib.py
此模块提供了一个用于读取和写入主要由Mac OS X使用的“属性列表”文件的接口,并支持二进制和XML plist文件。
属性列表(.plist
)文件格式是一个简单的序列化,支持基本的对象类型,如字典,列表,数字和字符串。通常顶层对象是字典。
要写出和解析plist文件,请使用dump()
和load()
函数。
要使用字节对象中的plist数据,请使用dumps()
和loads()
。
值可以是字符串,整数,浮点数,布尔值,元组,列表,字典(但只有字符串键),Data
,bytes
,bytesarray
或datetime.datetime
对象。
在版本3.4中已更改:新的API,旧的API已弃用。支持二进制格式plists添加。
也可以看看
- PList手册页
- 苹果的文件格式文件。
该模块定义了以下功能:
-
plistlib.
load
(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)¶ 读取plist文件。fp应该是一个可读的二进制文件对象。返回解包的根对象(通常是字典)。
fmt是文件的格式,以下值有效:
None
:自动检测文件格式FMT_XML
:XML文件格式FMT_BINARY
:二进制plist格式
如果use_builtin_types为true(默认值),二进制数据将作为
bytes
的实例返回,否则返回为Data
的实例。dict_type是用于从plist文件读取的字典的类型。plist的确切结构可以通过使用
collections.OrderedDict
(虽然键的顺序在plist文件中不重要)来恢复。FMT_XML
格式的XML数据使用xml.parsers.expat
中的Expat解析器解析 - 请参阅其文档,了解可能的异常XML格式的异常。未知的元素将被plist解析器简单地忽略。当文件无法解析时,二进制格式的解析器引发
InvalidFileException
。版本3.4中的新功能。
-
plistlib.
loads
(data, *, fmt=None, use_builtin_types=True, dict_type=dict)¶ 从字节对象加载plist。有关关键字参数的说明,请参见
load()
。版本3.4中的新功能。
-
plistlib.
dump
(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶ 将值写入plist文件。Fp应为可写二进制文件对象。
fmt参数指定plist文件的格式,可以是以下值之一:
FMT_XML
:XML格式化plist文件FMT_BINARY
:二进制格式化plist文件
当sort_keys为true(默认值)时,字典的键将以排序顺序写入plist,否则它们将以字典的迭代顺序写入。
当字典的键不是字符串时,当skipkeys为false(默认)时,函数引发
TypeError
,否则将跳过此类键。如果对象是不受支持的类型或包含不受支持类型的对象的容器,则会引发
TypeError
。对于不能在(二进制)plist文件中表示的整数值,将会引发
OverflowError
。版本3.4中的新功能。
-
plistlib.
dumps
(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶ 将值返回为plist格式的字节对象。有关此函数的关键字参数的说明,请参阅
dump()
的文档。版本3.4中的新功能。
以下函数已弃用:
-
plistlib.
readPlist
(pathOrFile)¶ 读取plist文件。pathOrFile可以是文件名或(可读和二进制)文件对象。返回解包的根对象(通常是字典)。
此函数调用
load()
进行实际工作,有关that function
关键字参数。注意
结果中的Dict值具有延迟到
__getitem_
的__getattr__
方法。这意味着您可以使用属性访问来访问这些字典的项目。自3.4版起已弃用:改用
load()
。
-
plistlib.
writePlist
(rootObject, pathOrFile)¶ 将rootObject写入XML plist文件。pathOrFile可以是文件名或(可写和二进制)文件对象
自3.4版起已弃用:改用
dump()
。
-
plistlib.
readPlistFromBytes
(data)¶ 从字节对象读取plist数据。返回根对象。
有关关键字参数的说明,请参见
load()
。注意
结果中的Dict值具有延迟到
__getitem_
的__getattr__
方法。这意味着您可以使用属性访问来访问这些字典的项目。自3.4版起已弃用:改用
loads()
。
以下类可用:
Dict([dict]):
返回与字典dict相同值的扩展映射对象。
此类是
dict
的子类,其中属性访问可用于访问项目。也就是说,aDict.key
与在映射中获取,设置和删除项目的aDict['key']
相同。自3.0版起已弃用。
- class
plistlib.
Data
(data)¶ 返回字节对象数据周围的“数据”包装器对象。这用在从/到plists转换以表示plist中可用的
<data>
类型的函数中。它有一个属性,
data
,可以用于检索存储在其中的Python字节对象。自版本3.4后已弃用:改用
bytes
物件。
以下常量可用:
-
plistlib.
FMT_XML
¶ plist文件的XML格式。
版本3.4中的新功能。
-
plistlib.
FMT_BINARY
¶ plist文件的二进制格式
版本3.4中的新功能。
14.5.1. Examples¶
生成plist:
pl = dict(
aString = "Doodah",
aList = ["A", "B", 12, 32.1, [1, 2, 3]],
aFloat = 0.1,
anInt = 728,
aDict = dict(
anotherString = "<hello & hi there!>",
aThirdString = "M\xe4ssig, Ma\xdf",
aTrueValue = True,
aFalseValue = False,
),
someData = b"<binary gunk>",
someMoreData = b"<lots of binary gunk>" * 10,
aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),
)
with open(fileName, 'wb') as fp:
dump(pl, fp)
解析plist:
with open(fileName, 'rb') as fp:
pl = load(fp)
print(pl["aKey"])