plistlib --- 生成與解析 Apple .plist 文件?

源代碼: Lib/plistlib.py


此模塊提供了可讀寫(xiě) Apple "property list" 文件的接口,它主要用于 macOS 和 iOS 系統。 此模塊同時(shí)支持二進(jìn)制和 XML plist 文件。

property list (.plist) 文件格式是一種簡(jiǎn)單的序列化格式,它支持一些基本對象類(lèi)型,例如字典、列表、數字和字符串等。 通常使用一個(gè)字典作為最高層級對象。

要寫(xiě)入和解析 plist 文件,請使用 dump()load() 函數。

要以字節串對象形式操作 plist 數據,請使用 dumps()loads()。

值可以為字符串、整數、浮點(diǎn)數、布爾值、元組、列表、字典(但只允許用字符串作為鍵)、bytes、bytearraydatetime.datetime 對象。

在 3.4 版更改: 新版 API,舊版 API 已被棄用。 添加了對二進(jìn)制 plist 格式的支持。

在 3.8 版更改: 添加了在二進(jìn)制 plist 中讀寫(xiě) UID 令牌的支持,例如用于 NSKeyedArchiver 和 NSKeyedUnarchiver。

在 3.9 版更改: 舊 API 已被移除。

參見(jiàn)

PList 指南頁(yè)面

針對該文件格式的 Apple 文檔。

這個(gè)模塊定義了以下函數:

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

讀取 plist 文件。 fp 應當可讀并且為二進(jìn)制文件對象。 返回已解包的根對象(通常是一個(gè)字典)。

fmt 為文件的格式,有效的值如下:

  • None: 自動(dòng)檢測文件格式

  • FMT_XML: XML 文件格式

  • FMT_BINARY: 二進(jìn)制 plist 格式

dict_type 為字典用來(lái)從 plist 文件讀取的類(lèi)型。

FMT_XML 格式的 XML 數據 會(huì )使用來(lái)自 xml.parsers.expat 的 Expat 解析器 -- 請參閱其文檔了解錯誤格式 XML 可能引發(fā)的異常。 未知元素將被 plist 解析器直接略過(guò)。

當文件無(wú)法被解析時(shí)二進(jìn)制格式的解析器將引發(fā) InvalidFileException。

3.4 新版功能.

plistlib.loads(data, *, fmt=None, dict_type=dict)?

從一個(gè) bytes 對象加載 plist。 參閱 load() 獲取相應關(guān)鍵字參數的說(shuō)明。

3.4 新版功能.

plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)?

value 寫(xiě)入 plist 文件。 Fp 應當可寫(xiě)并且為二進(jìn)制文件對象。

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

  • FMT_XML: XML 格式的 plist 文件

  • FMT_BINARY: 二進(jìn)制格式的 plist 文件

sort_keys 為真值(默認)時(shí)字典的鍵將經(jīng)過(guò)排序再寫(xiě)入 plist,否則將按字典的迭代順序寫(xiě)入。

skipkeys 為假值(默認)時(shí)該函數將在字典的鍵不為字符串時(shí)引發(fā) TypeError,否則將跳過(guò)這樣的鍵。

如果對象是不受支持的類(lèi)型或者是包含不受支持類(lèi)型的對象的容器則將引發(fā) TypeError。

對于無(wú)法在(二進(jìn)制)plist 文件中表示的整數值,將會(huì )引發(fā) OverflowError。

3.4 新版功能.

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

value 以 plist 格式字節串對象的形式返回。 參閱 dump() 的文檔獲取此函數的關(guān)鍵字參數的說(shuō)明。

3.4 新版功能.

可以使用以下的類(lèi):

class plistlib.UID(data)?

包裝一個(gè) int。 該類(lèi)將在讀取或寫(xiě)入 NSKeyedArchiver 編碼的數據時(shí)被使用,其中包含 UID(參見(jiàn) PList 指南)。

It has one attribute, data, which can be used to retrieve the int value of the UID. data must be in the range 0 <= data < 2**64.

3.8 新版功能.

可以使用以下的常量:

plistlib.FMT_XML?

用于 plist 文件的 XML 格式。

3.4 新版功能.

plistlib.FMT_BINARY?

用于 plist 文件的二進(jìn)制格式。

3.4 新版功能.

例子?

生成一個(gè) 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)

解析一個(gè) plist:

with open(fileName, 'rb') as fp:
    pl = load(fp)
print(pl["aKey"])