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ù)、布爾值、元組、列表、字典(但只允許用字符串作為鍵)、bytes
、bytearray
或 datetime.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)檢測(cè)文件格式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 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"])