plistlib —生成和解析 Mac OS X .plist 文件

源代码: Lib/plistlib.py


该模块提供了一个用于读写 Mac OS X 主要使用的“属性列表”文件的接口,并且支持二进制和 XML plist 文件。

属性列表(.plist)文件格式是一种简单的序列化,支持基本对象类型,如字典,列表,数字和字符串。通常,顶级对象是字典。

要写出并解析 plist 文件,请使用dump()load()函数。

要使用字节对象中的 plist 数据,请使用dumps()loads()

值可以是字符串,整数,浮点数,布尔值,Tuples,列表,字典(但仅带字符串键),Databytesbytesarraydatetime.datetime对象。

在版本 3.4 中更改:不推荐使用新 API 和旧 API。增加了对二进制格式的支持。

在 3.8 版中进行了更改:添加了对读取和写入UID令牌的支持,如 NSKeyedArchiver 和 NSKeyedUnarchiver 所使用的。

See also

该模块定义以下Function:

  • plistlib. load(* fp **,* fmt = None use_builtin_types = True dict_type = dict *)
    • 读取 plist 文件。 * fp *应该是可读的二进制文件对象。返回解压缩的根对象(通常是字典)。
  • fmt *是文件格式,并且以下值有效:

如果* use_builtin_types *为 true(默认值),则二进制数据将作为bytes的实例返回,否则将作为Data的实例返回。

  • dict_type *是用于从 plist 文件读取的字典的类型。

FMT_XML格式的 XML 数据使用xml.parsers.expat的 Expat 解析器进行解析–有关格式错误的 XML 的可能 exception,请参阅其文档。 plist 解析器将忽略未知的元素。

无法解析文件时,二进制格式的解析器将引发InvalidFileException

3.4 版的新Function。

  • plistlib. loads(* data **,* fmt = None use_builtin_types = True dict_type = dict *)
    • 从 bytes 对象加载 plist。有关关键字参数的说明,请参见load()

3.4 版的新Function。

  • plistlib. dump(* value fp **,* fmt = FMT_XML sort_keys = True skipkeys = False *)
    • 将* value *写入 plist 文件。 * Fp *应该是可写的二进制文件对象。
  • fmt *参数指定 plist 文件的格式,并且可以是以下值之一:

如果* sort_keys *为 true(默认值),则字典的键将以排序的 Sequences 写入 plist,否则它们将以字典的迭代 Sequences 写入。

如果* skipkeys *为假(默认值),则当字典的键不是字符串时,该函数将引发TypeError,否则将跳过此类键。

如果对象是不受支持的类型或包含不受支持的类型的对象的容器,则会引发TypeError

对于无法在(二进制)plist 文件中表示的整数值,将引发OverflowError

3.4 版的新Function。

  • plistlib. dumps(* value **,* fmt = FMT_XML sort_keys = True skipkeys = False *)
    • 返回* value *作为 plist 格式的字节对象。有关此函数的关键字参数的说明,请参见dump()的文档。

3.4 版的新Function。

不推荐使用以下Function:

  • plistlib. readPlist(* pathOrFile *)
    • 读取 plist 文件。 * pathOrFile *可以是文件名,也可以是(可读和二进制)文件对象。返回解包的根对象(通常是字典)。

此函数调用load()进行实际工作,有关关键字参数的说明,请参见that function的文档。

从 3.4 版开始不推荐使用:改为使用load()

在版本 3.7 中进行了更改:结果中的 Dict 值现在是普通 dict。您不再可以使用属性访问来访问这些词典的项目。

  • plistlib. writePlist(* rootObject pathOrFile *)
    • 将* rootObject *写入 XML plist 文件。 * pathOrFile *可以是文件名,也可以是(可写和二进制)文件对象

从 3.4 版开始不推荐使用:改为使用dump()

  • plistlib. readPlistFromBytes(* data *)
    • 从字节对象读取 plist 数据。返回根对象。

有关关键字参数的说明,请参见load()

从 3.4 版开始不推荐使用:改为使用loads()

在版本 3.7 中进行了更改:结果中的 Dict 值现在是普通 dict。您不再可以使用属性访问来访问这些词典的项目。

  • plistlib. writePlistToBytes(* rootObject *)
    • 返回* rootObject *作为 XML plist 格式的字节对象。

从 3.4 版开始不推荐使用:改为使用dumps()

提供以下类:

  • 类别 plistlib. Data(数据)
    • 返回围绕字节对象* data *的“数据”包装器对象。在用于/转换成函数的函数中使用它,以表示函数中可用的<data>类型。

它具有一个属性data,可用于检索存储在其中的 Python 字节对象。

从 3.4 版开始不推荐使用:而是使用bytes对象。

  • 类别 plistlib. UID(数据)
    • 包装int。在读取或写入包含 UID 的 NSKeyedArchiver 编码数据时使用此方法(请参见 PList 手册)。

它具有一个属性data,可用于检索 UID 的 int 值。 data必须在 0 <= data <2 ** 64 范围内。

3.8 版的新Function。

以下常量可用:

  • plistlib. FMT_XML
    • plist 文件的 XML 格式。

3.4 版的新Function。

  • plistlib. FMT_BINARY
    • plist 文件的二进制格式

3.4 版的新Function。

Examples

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