blob: 9ba226607d1feee2156ffa54adf729e699f56edf [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
Georg Brandl525d3552014-10-29 10:26:56 +010041 `PList manual page <https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/plist.5.html>`_
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
66 plist file. The exact structure of the plist can be recovered by using
67 :class:`collections.OrderedDict` (although the order of keys shouldn't be
68 important in plist files).
69
70 XML data for the :data:`FMT_XML` format is parsed using the Expat parser
71 from :mod:`xml.parsers.expat` -- see its documentation for possible
72 exceptions on ill-formed XML. Unknown elements will simply be ignored
73 by the plist parser.
74
75 The parser for the binary format raises :exc:`InvalidFileException`
76 when the file cannot be parsed.
77
78 .. versionadded:: 3.4
79
80
81.. function:: loads(data, \*, fmt=None, use_builtin_types=True, dict_type=dict)
82
83 Load a plist from a bytes object. See :func:`load` for an explanation of
84 the keyword arguments.
85
Ronald Oussoren6db66532014-01-15 11:32:35 +010086 .. versionadded:: 3.4
87
Ronald Oussorenc5cf7972013-11-21 15:46:49 +010088
89.. function:: dump(value, fp, \*, fmt=FMT_XML, sort_keys=True, skipkeys=False)
90
91 Write *value* to a plist file. *Fp* should be a writable, binary
92 file object.
93
94 The *fmt* argument specifies the format of the plist file and can be
95 one of the following values:
96
97 * :data:`FMT_XML`: XML formatted plist file
98
99 * :data:`FMT_BINARY`: Binary formatted plist file
100
101 When *sort_keys* is true (the default) the keys for dictionaries will be
102 written to the plist in sorted order, otherwise they will be written in
103 the iteration order of the dictionary.
104
105 When *skipkeys* is false (the default) the function raises :exc:`TypeError`
106 when a key of a dictionary is not a string, otherwise such keys are skipped.
107
108 A :exc:`TypeError` will be raised if the object is of an unsupported type or
109 a container that contains objects of unsupported types.
110
Ronald Oussoren6db66532014-01-15 11:32:35 +0100111 An :exc:`OverflowError` will be raised for integer values that cannot
112 be represented in (binary) plist files.
113
Larry Hastings3732ed22014-03-15 21:13:56 -0700114 .. versionadded:: 3.4
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100115
116
117.. function:: dumps(value, \*, fmt=FMT_XML, sort_keys=True, skipkeys=False)
118
119 Return *value* as a plist-formatted bytes object. See
120 the documentation for :func:`dump` for an explanation of the keyword
121 arguments of this function.
122
Larry Hastings3732ed22014-03-15 21:13:56 -0700123 .. versionadded:: 3.4
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100124
125The following functions are deprecated:
126
127.. function:: readPlist(pathOrFile)
128
129 Read a plist file. *pathOrFile* may be either a file name or a (readable
130 and binary) file object. Returns the unpacked root object (which usually
131 is a dictionary).
132
Senthil Kumaranb4760ef2015-06-14 17:35:37 -0700133 This function calls :func:`load` to do the actual work, see the documentation
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100134 of :func:`that function <load>` for an explanation of the keyword arguments.
135
136 .. note::
137
138 Dict values in the result have a ``__getattr__`` method that defers
139 to ``__getitem_``. This means that you can use attribute access to
140 access items of these dictionaries.
141
Larry Hastings3732ed22014-03-15 21:13:56 -0700142 .. deprecated:: 3.4 Use :func:`load` instead.
Georg Brandl86def6c2008-01-21 20:36:10 +0000143
144
145.. function:: writePlist(rootObject, pathOrFile)
146
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100147 Write *rootObject* to an XML plist file. *pathOrFile* may be either a file name
148 or a (writable and binary) file object
Georg Brandl86def6c2008-01-21 20:36:10 +0000149
Larry Hastings3732ed22014-03-15 21:13:56 -0700150 .. deprecated:: 3.4 Use :func:`dump` instead.
Georg Brandl86def6c2008-01-21 20:36:10 +0000151
152
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000153.. function:: readPlistFromBytes(data)
Georg Brandl86def6c2008-01-21 20:36:10 +0000154
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000155 Read a plist data from a bytes object. Return the root object.
Georg Brandl86def6c2008-01-21 20:36:10 +0000156
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100157 See :func:`load` for a description of the keyword arguments.
158
159 .. note::
160
161 Dict values in the result have a ``__getattr__`` method that defers
162 to ``__getitem_``. This means that you can use attribute access to
163 access items of these dictionaries.
164
165 .. deprecated:: 3.4 Use :func:`loads` instead.
166
Georg Brandl86def6c2008-01-21 20:36:10 +0000167
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000168.. function:: writePlistToBytes(rootObject)
Georg Brandl86def6c2008-01-21 20:36:10 +0000169
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100170 Return *rootObject* as an XML plist-formatted bytes object.
171
172 .. deprecated:: 3.4 Use :func:`dumps` instead.
173
Georg Brandl86def6c2008-01-21 20:36:10 +0000174
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100175The following classes are available:
176
177.. class:: Dict([dict]):
178
179 Return an extended mapping object with the same value as dictionary
180 *dict*.
181
182 This class is a subclass of :class:`dict` where attribute access can
183 be used to access items. That is, ``aDict.key`` is the same as
184 ``aDict['key']`` for getting, setting and deleting items in the mapping.
185
186 .. deprecated:: 3.0
187
Georg Brandl86def6c2008-01-21 20:36:10 +0000188
189.. class:: Data(data)
190
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000191 Return a "data" wrapper object around the bytes object *data*. This is used
192 in functions converting from/to plists to represent the ``<data>`` type
Georg Brandl86def6c2008-01-21 20:36:10 +0000193 available in plists.
194
195 It has one attribute, :attr:`data`, that can be used to retrieve the Python
Ezio Melotti6e9b1df2009-09-16 00:49:03 +0000196 bytes object stored in it.
Georg Brandl86def6c2008-01-21 20:36:10 +0000197
Martin Panterd21e0b52015-10-10 10:36:22 +0000198 .. deprecated:: 3.4 Use a :class:`bytes` object instead.
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100199
200
Larry Hastings3732ed22014-03-15 21:13:56 -0700201The following constants are available:
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100202
203.. data:: FMT_XML
204
205 The XML format for plist files.
206
207 .. versionadded:: 3.4
208
209
210.. data:: FMT_BINARY
211
212 The binary format for plist files
213
214 .. versionadded:: 3.4
215
Georg Brandl86def6c2008-01-21 20:36:10 +0000216
217Examples
218--------
219
220Generating a plist::
221
222 pl = dict(
Ezio Melotti985e24d2009-09-13 07:54:02 +0000223 aString = "Doodah",
224 aList = ["A", "B", 12, 32.1, [1, 2, 3]],
Georg Brandl86def6c2008-01-21 20:36:10 +0000225 aFloat = 0.1,
226 anInt = 728,
Ezio Melotti985e24d2009-09-13 07:54:02 +0000227 aDict = dict(
228 anotherString = "<hello & hi there!>",
229 aThirdString = "M\xe4ssig, Ma\xdf",
230 aTrueValue = True,
231 aFalseValue = False,
Georg Brandl86def6c2008-01-21 20:36:10 +0000232 ),
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100233 someData = b"<binary gunk>",
234 someMoreData = b"<lots of binary gunk>" * 10,
Georg Brandl86def6c2008-01-21 20:36:10 +0000235 aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),
236 )
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100237 with open(fileName, 'wb') as fp:
238 dump(pl, fp)
Georg Brandl86def6c2008-01-21 20:36:10 +0000239
240Parsing a plist::
241
Ronald Oussorenc5cf7972013-11-21 15:46:49 +0100242 with open(fileName, 'rb') as fp:
243 pl = load(fp)
Neal Norwitz752abd02008-05-13 04:55:24 +0000244 print(pl["aKey"])