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

源代碼: Lib/plistlib.py


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

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

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

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

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

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

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

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

參見

PList 指南頁面

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

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

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

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

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

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

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

當文件無法被解析時二進制格式的解析器將引發(fā) InvalidFileException

3.4 新版功能.

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

從一個 bytes 對象加載 plist。 參閱 load() 獲取相應關鍵字參數(shù)的說明。

3.4 新版功能.

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

value 寫入 plist 文件。 Fp 應當可寫并且為二進制文件對象。

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

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

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

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

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

3.4 新版功能.

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

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

3.4 新版功能.

可以使用以下的類:

class plistlib.UID(data)?

包裝一個 int。 該類將在讀取或?qū)懭?NSKeyedArchiver 編碼的數(shù)據(jù)時被使用,其中包含 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 文件的二進制格式。

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