blob: 8bd6b63a8ee50bd411d611c60af1e42717e9079c [file] [log] [blame]
Georg Brandlc575c902008-09-13 17:46:05 +00001:mod:`plistlib` --- Generate and parse Mac OS X ``.plist`` files
2================================================================
Georg Brandl86def6c2008-01-21 20:36:10 +00003
4.. module:: plistlib
Georg Brandlc575c902008-09-13 17:46:05 +00005 :synopsis: Generate and parse Mac OS X plist files.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl86def6c2008-01-21 20:36:10 +00007.. moduleauthor:: Jack Jansen
8.. sectionauthor:: Georg Brandl <georg@python.org>
9.. (harvested from docstrings in the original file)
10
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040011**Source code:** :source:`Lib/plistlib.py`
12
Georg Brandl86def6c2008-01-21 20:36:10 +000013.. index::
14 pair: plist; file
15 single: property list
16
Raymond Hettinger469271d2011-01-27 20:38:46 +000017--------------
18
Georg Brandl86def6c2008-01-21 20:36:10 +000019This module provides an interface for reading and writing the "property list"
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010020files used mainly by Mac OS X and supports both binary and XML plist files.
Georg Brandl86def6c2008-01-21 20:36:10 +000021
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010022The property list (``.plist``) file format is a simple serialization supporting
Georg Brandl86def6c2008-01-21 20:36:10 +000023basic object types, like dictionaries, lists, numbers and strings. Usually the
24top level object is a dictionary.
25
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010026To write out and to parse a plist file, use the :func:`dump` and
27:func:`load` functions.
Ezio Melotti6e9b1df2009-09-16 00:49:03 +000028
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010029To work with plist data in bytes objects, use :func:`dumps`
30and :func:`loads`.
Ezio Melotti6e9b1df2009-09-16 00:49:03 +000031
Georg Brandl86def6c2008-01-21 20:36:10 +000032Values can be strings, integers, floats, booleans, tuples, lists, dictionaries
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010033(but only with string keys), :class:`Data`, :class:`bytes`, :class:`bytesarray`
34or :class:`datetime.datetime` objects.
Georg Brandl86def6c2008-01-21 20:36:10 +000035
Larry Hastings3732ed22014-03-15 21:13:56 -070036.. versionchanged:: 3.4
37 New API, old API deprecated. Support for binary format plists added.
38
Georg Brandl86def6c2008-01-21 20:36:10 +000039.. seealso::
40
Sanyam Khurana338cd832018-01-20 05:55:37 +053041 `PList manual page <https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/PropertyLists/>`_
Georg Brandl86def6c2008-01-21 20:36:10 +000042 Apple's documentation of the file format.
43
44
45This module defines the following functions:
46
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010047.. function:: load(fp, \*, fmt=None, use_builtin_types=True, dict_type=dict)
Georg Brandl86def6c2008-01-21 20:36:10 +000048
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010049 Read a plist file. *fp* should be a readable and binary file object.
50 Return the unpacked root object (which usually is a
Georg Brandl86def6c2008-01-21 20:36:10 +000051 dictionary).
52
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010053 The *fmt* is the format of the file and the following values are valid:
54
55 * :data:`None`: Autodetect the file format
56
57 * :data:`FMT_XML`: XML file format
58
59 * :data:`FMT_BINARY`: Binary plist format
60
Serhiy Storchaka0e90e992013-11-29 12:19:53 +020061 If *use_builtin_types* is true (the default) binary data will be returned
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010062 as instances of :class:`bytes`, otherwise it is returned as instances of
63 :class:`Data`.
64
65 The *dict_type* is the type used for dictionaries that are read from the
Andrés Delfino1cbdb222018-06-08 18:51:20 -030066 plist file.
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010067
68 XML data for the :data:`FMT_XML` format is parsed using the Expat parser
69 from :mod:`xml.parsers.expat` -- see its documentation for possible
70 exceptions on ill-formed XML. Unknown elements will simply be ignored
71 by the plist parser.
72
73 The parser for the binary format raises :exc:`InvalidFileException`
74 when the file cannot be parsed.
75
76 .. versionadded:: 3.4
77
78
79.. function:: loads(data, \*, fmt=None, use_builtin_types=True, dict_type=dict)
80
81 Load a plist from a bytes object. See :func:`load` for an explanation of
82 the keyword arguments.
83
Ronald Oussoren6db66532014-01-15 11:32:35 +010084 .. versionadded:: 3.4
85
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010086
87.. function:: dump(value, fp, \*, fmt=FMT_XML, sort_keys=True, skipkeys=False)
88
89 Write *value* to a plist file. *Fp* should be a writable, binary
90 file object.
91
92 The *fmt* argument specifies the format of the plist file and can be
93 one of the following values:
94
95 * :data:`FMT_XML`: XML formatted plist file
96
97 * :data:`FMT_BINARY`: Binary formatted plist file
98
99 When *sort_keys* is true (the default) the keys for dictionaries will be
100 written to the plist in sorted order, otherwise they will be written in
101 the iteration order of the dictionary.
102
103 When *skipkeys* is false (the default) the function raises :exc:`TypeError`
104 when a key of a dictionary is not a string, otherwise such keys are skipped.
105
106 A :exc:`TypeError` will be raised if the object is of an unsupported type or
107 a container that contains objects of unsupported types.
108
Ronald Oussoren6db66532014-01-15 11:32:35 +0100109 An :exc:`OverflowError` will be raised for integer values that cannot
110 be represented in (binary) plist files.
111
Larry Hastings3732ed22014-03-15 21:13:56 -0700112 .. versionadded:: 3.4
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100113
114
115.. function:: dumps(value, \*, fmt=FMT_XML, sort_keys=True, skipkeys=False)
116
117 Return *value* as a plist-formatted bytes object. See
118 the documentation for :func:`dump` for an explanation of the keyword
119 arguments of this function.
120
Larry Hastings3732ed22014-03-15 21:13:56 -0700121 .. versionadded:: 3.4
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100122
123The following functions are deprecated:
124
125.. function:: readPlist(pathOrFile)
126
127 Read a plist file. *pathOrFile* may be either a file name or a (readable
128 and binary) file object. Returns the unpacked root object (which usually
129 is a dictionary).
130
Senthil Kumaranb4760ef2015-06-14 17:35:37 -0700131 This function calls :func:`load` to do the actual work, see the documentation
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100132 of :func:`that function <load>` for an explanation of the keyword arguments.
133
Larry Hastings3732ed22014-03-15 21:13:56 -0700134 .. deprecated:: 3.4 Use :func:`load` instead.
Georg Brandl86def6c2008-01-21 20:36:10 +0000135
Serhiy Storchakaedef3582017-05-15 13:21:31 +0300136 .. versionchanged:: 3.7
137 Dict values in the result are now normal dicts. You no longer can use
138 attribute access to access items of these dictionaries.
139
Georg Brandl86def6c2008-01-21 20:36:10 +0000140
141.. function:: writePlist(rootObject, pathOrFile)
142
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100143 Write *rootObject* to an XML plist file. *pathOrFile* may be either a file name
144 or a (writable and binary) file object
Georg Brandl86def6c2008-01-21 20:36:10 +0000145
Larry Hastings3732ed22014-03-15 21:13:56 -0700146 .. deprecated:: 3.4 Use :func:`dump` instead.
Georg Brandl86def6c2008-01-21 20:36:10 +0000147
148
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000149.. function:: readPlistFromBytes(data)
Georg Brandl86def6c2008-01-21 20:36:10 +0000150
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000151 Read a plist data from a bytes object. Return the root object.
Georg Brandl86def6c2008-01-21 20:36:10 +0000152
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100153 See :func:`load` for a description of the keyword arguments.
154
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100155 .. deprecated:: 3.4 Use :func:`loads` instead.
156
Serhiy Storchakaedef3582017-05-15 13:21:31 +0300157 .. versionchanged:: 3.7
158 Dict values in the result are now normal dicts. You no longer can use
159 attribute access to access items of these dictionaries.
160
Georg Brandl86def6c2008-01-21 20:36:10 +0000161
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000162.. function:: writePlistToBytes(rootObject)
Georg Brandl86def6c2008-01-21 20:36:10 +0000163
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100164 Return *rootObject* as an XML plist-formatted bytes object.
165
166 .. deprecated:: 3.4 Use :func:`dumps` instead.
167
Georg Brandl86def6c2008-01-21 20:36:10 +0000168
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100169The following classes are available:
170
Georg Brandl86def6c2008-01-21 20:36:10 +0000171.. class:: Data(data)
172
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000173 Return a "data" wrapper object around the bytes object *data*. This is used
174 in functions converting from/to plists to represent the ``<data>`` type
Georg Brandl86def6c2008-01-21 20:36:10 +0000175 available in plists.
176
177 It has one attribute, :attr:`data`, that can be used to retrieve the Python
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000178 bytes object stored in it.
Georg Brandl86def6c2008-01-21 20:36:10 +0000179
Martin Panterd21e0b52015-10-10 10:36:22 +0000180 .. deprecated:: 3.4 Use a :class:`bytes` object instead.
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100181
182
Larry Hastings3732ed22014-03-15 21:13:56 -0700183The following constants are available:
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100184
185.. data:: FMT_XML
186
187 The XML format for plist files.
188
189 .. versionadded:: 3.4
190
191
192.. data:: FMT_BINARY
193
194 The binary format for plist files
195
196 .. versionadded:: 3.4
197
Georg Brandl86def6c2008-01-21 20:36:10 +0000198
199Examples
200--------
201
202Generating a plist::
203
204 pl = dict(
Ezio Melotti985e24d2009-09-13 07:54:02 +0000205 aString = "Doodah",
206 aList = ["A", "B", 12, 32.1, [1, 2, 3]],
Georg Brandl86def6c2008-01-21 20:36:10 +0000207 aFloat = 0.1,
208 anInt = 728,
Ezio Melotti985e24d2009-09-13 07:54:02 +0000209 aDict = dict(
210 anotherString = "<hello & hi there!>",
211 aThirdString = "M\xe4ssig, Ma\xdf",
212 aTrueValue = True,
213 aFalseValue = False,
Georg Brandl86def6c2008-01-21 20:36:10 +0000214 ),
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100215 someData = b"<binary gunk>",
216 someMoreData = b"<lots of binary gunk>" * 10,
Georg Brandl86def6c2008-01-21 20:36:10 +0000217 aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),
218 )
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100219 with open(fileName, 'wb') as fp:
220 dump(pl, fp)
Georg Brandl86def6c2008-01-21 20:36:10 +0000221
222Parsing a plist::
223
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100224 with open(fileName, 'rb') as fp:
225 pl = load(fp)
Neal Norwitz752abd02008-05-13 04:55:24 +0000226 print(pl["aKey"])