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为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文件的格式,可以是以下值之一:

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()

plistlib.writePlistToBytes(rootObject)

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

自版本3.4后已弃用:改用dumps()

以下类可用:

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