plistlib --- 生成與解析 Mac OS X .plist 文件?

源代碼: Lib/plistlib.py


此模塊提供了讀寫主要用于 Mac OS X 的 "property list" 文件的接口,并同時支持二進制和 XML plist 文件。

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

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

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

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

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

參見

PList 指南頁面

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

這個模塊定義了以下函數:

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

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

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

如果 use_builtin_types 為真值(默認)則將以 bytes 實例的形式返回二進制數據,否則將以 Data 實例的形式返回。

dict_type 為字典用來從 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)?

從一個 bytes 對象加載 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 為假值(默認)時該函數將在字典的鍵不為字符串時引發 TypeError,否則將跳過這樣的鍵。

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

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

3.4 新版功能.

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

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

3.4 新版功能.

以下函數已被棄用:

plistlib.readPlist(pathOrFile)?

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

此函數會調用 load() 來完成實際操作,請參閱 該函數 的文檔獲取相應關鍵字參數的說明。

3.4 版后已移除: 使用 load() 來代替。

在 3.7 版更改: 結果中的字典值現在是普通字典。 你不能再使用屬性引用形式來訪問這些字典中的項。

plistlib.writePlist(rootObject, pathOrFile)?

rootObject 寫入 XML plist 文件。 pathOrFile 可以是文件名或(可寫并且為二進制的)文件對象。

3.4 版后已移除: 使用 dump() 來代替。

plistlib.readPlistFromBytes(data)?

從字節串對象讀取 plist 數據。 返回根對象。

參閱 load() 獲取相應關鍵字參數的說明。

3.4 版后已移除: 使用 loads() 來代替。

在 3.7 版更改: 結果中的字典值現在是普通字典。 你不能再使用屬性引用形式來訪問這些字典中的項。

plistlib.writePlistToBytes(rootObject)?

rootObject 作為 XML plist 格式的字節串對象返回。

3.4 版后已移除: 使用 dumps() 來代替。

可以使用以下的類:

class plistlib.Data(data)?

返回一個包含字節串對象 data 的 "data" 包裝器對象。 該類將在對 plist 進行雙向轉換的函數中被用來代表 plist 中可用的 <data> 類型。

它具有一個屬性 data,可被用來提取其中所保存的 Python 字節串對象。

3.4 版后已移除: 使用 bytes 對象來代替。

可以使用以下的常量:

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