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

源代碼: Lib/plistlib.py


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

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

要寫入和解析 plist 文件,請(qǐng)使用 dump()load() 函數(shù)。

要以字節(jié)串對(duì)象形式操作 plist 數(shù)據(jù),請(qǐng)使用 dumps()loads()。

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

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

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

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

參見

PList 指南頁面

針對(duì)該文件格式的 Apple 文檔。

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

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

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

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

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

  • FMT_XML: XML 文件格式

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

dict_type 為字典用來從 plist 文件讀取的類型。

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

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

3.4 新版功能.

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

從一個(gè) bytes 對(duì)象加載 plist。 參閱 load() 獲取相應(yīng)關(guān)鍵字參數(shù)的說明。

3.4 新版功能.

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

value 寫入 plist 文件。 Fp 應(yīng)當(dāng)可寫并且為二進(jìn)制文件對(duì)象。

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

  • FMT_XML: XML 格式的 plist 文件

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

當(dāng) sort_keys 為真值(默認(rèn))時(shí)字典的鍵將經(jīng)過排序再寫入 plist,否則將按字典的迭代順序?qū)懭搿?/p>

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

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

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

3.4 新版功能.

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

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

3.4 新版功能.

可以使用以下的類:

class plistlib.UID(data)?

包裝一個(gè) int。 該類將在讀取或?qū)懭?NSKeyedArchiver 編碼的數(shù)據(jù)時(shí)被使用,其中包含 UID(參見 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"])