plistlib — 生成和解析 Apple .plist 文件 — Python 文档
plistlib — 生成并解析 Apple .plist 文件
源代码: :source:`Lib/plistlib.py`
该模块提供了一个用于读写 Apple 使用的“属性列表”文件的接口,主要在 macOS 和 iOS 上使用。 该模块支持二进制和 XML plist 文件。
属性列表 (.plist
) 文件格式是一种简单的序列化,支持基本对象类型,如字典、列表、数字和字符串。 通常顶级对象是字典。
要写出和解析 plist 文件,请使用 dump() 和 load() 函数。
要处理字节对象中的 plist 数据,请使用 dumps() 和 loads()。
值可以是字符串、整数、浮点数、布尔值、元组、列表、字典(但仅限字符串键)、bytes、bytearray 或 datetime.datetime 对象.
3.4 版更改: 新 API,弃用旧 API。 添加了对二进制格式 plist 的支持。
3.8 版更改: 支持在 NSKeyedArchiver 和 NSKeyedUnarchiver 使用的二进制 plist 中读取和写入 UID 令牌。
3.9 版更改: 移除旧 API。
该模块定义了以下功能:
- plistlib.load(fp, *, fmt=None, dict_type=dict)
读取 plist 文件。 fp 应该是一个可读的二进制文件对象。 返回解压后的根对象(通常是字典)。
fmt 是文件的格式,以下值有效:
无:自动检测文件格式
FMT_XML:XML 文件格式
FMT_BINARY:二进制plist格式
dict_type 是用于从 plist 文件中读取的字典的类型。
FMT_XML 格式的 XML 数据使用来自 xml.parsers.expat 的 Expat 解析器进行解析 - 有关格式错误的 XML 的可能异常,请参阅其文档。 未知元素将被 plist 解析器简单地忽略。
当无法解析文件时,二进制格式的解析器会引发
InvalidFileException
。3.4 版中的新功能。
- plistlib.loads(data, *, fmt=None, dict_type=dict)
从字节对象加载 plist。 有关关键字参数的说明,请参阅 load()。
3.4 版中的新功能。
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)
将 value 写入 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)
将 value 作为 plist 格式的字节对象返回。 有关此函数的关键字参数的说明,请参阅 dump() 的文档。
3.4 版中的新功能。
以下类可用:
- class plistlib.UID(data)
包装一个 int。 这在读取或写入包含 UID 的 NSKeyedArchiver 编码数据时使用(参见 PList 手册)。
它有一个属性,
data
,可用于检索 UID 的 int 值。data
必须在0 <= data < 2**64
范围内。3.8 版中的新功能。
以下常量可用:
- plistlib.FMT_XML
plist 文件的 XML 格式。
3.4 版中的新功能。
- plistlib.FMT_BINARY
plist 文件的二进制格式
3.4 版中的新功能。
例子
生成一个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"])