Skip to main content

14.5. plistlib —生成并解析Mac OS X .plist 文件

源代码: Lib/plistlib.py


此模块提供了一个接口,用于读取和写入主要由Mac OS X使用的“属性列表”文件,并支持二进制和XML plist文件。

属性列表(.plist)文件格式是支持基本对象类型的简单序列化,如字典,列表,数字和字符串。通常顶层对象是字典。

要写出和解析plist文件,请使用 dump()load() 函数。

要使用字节对象中的plist数据,请使用 dumps()loads()

值可以是字符串,整数,浮点数,布尔值,元组,列表,字典(但只有字符串键),Databytesbytesarraydatetime.datetime 对象。

在 3.4 版更改: 新的API,旧的API已弃用。支持二进制格式plists添加。

参见

PList手册页

苹果的文件格式文件。

该模块定义了以下功能:

plistlib.load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)

读取plist文件。 fp 应该是一个可读的二进制文件对象。返回解包的根对象(通常是字典)。

fmt 是文件的格式,以下值有效:

如果 use_builtin_types 为真(默认),二进制数据将作为 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)

value 写入plist文件。 Fp 应该是一个可写的二进制文件对象。

fmt 参数指定plist文件的格式,可以是以下值之一:

sort_keys 为真(默认值)时,字典的键将以排序顺序写入plist,否则它们将以字典的迭代顺序写入。

skipkeys 为false(默认值)时,当字典的键不是字符串时,该函数引发 TypeError,否则跳过这样的键。

如果对象是不受支持的类型或包含不受支持类型的对象的容器,则会引发 TypeError

OverflowError 将引发无法在(二进制)plist文件中表示的整数值。

3.4 新版功能.

plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)

value 作为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()

plistlib.writePlistToBytes(rootObject)

rootObject 作为XML plist格式的字节对象返回。

3.4 版后已移除: 请改用 dumps()

以下类可用:

Dict([dict]):

返回与字典 dict 具有相同值的扩展映射对象。

这个类是 dict 的子类,其中属性访问可以用于访问项目。也就是说,aDict.keyaDict['key'] 相同,用于在映射中获取,设置和删除项目。

3.0 版后已移除.

class plistlib.Data(data)

在字节对象 data 周围返回一个“数据”包装器对象。这用于从/到plists转换以表示plists中可用的 <data> 类型的函数。

它有一个属性,data,可以用于检索存储在其中的Python字节对象。

3.4 版后已移除: 请改用 bytes 对象。

以下常量可用:

plistlib.FMT_XML

plist文件的XML格式。

3.4 新版功能.

plistlib.FMT_BINARY

plist文件的二进制格式

3.4 新版功能.

14.5.1. 例子

生成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"])