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
、bytearray
或 datetime.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 range0 <= 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"])