| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 
 | :mod:`plistlib` --- Generate and parse Mac OS X ``.plist`` files
================================================================
.. module:: plistlib
   :synopsis: Generate and parse Mac OS X plist files.
.. moduleauthor:: Jack Jansen
.. sectionauthor:: Georg Brandl <georg@python.org>
.. (harvested from docstrings in the original file)
.. versionchanged:: 2.6
   This module was previously only available in the Mac-specific library, it is
   now available for all platforms.
.. index::
   pair: plist; file
   single: property list
**Source code:** :source:`Lib/plistlib.py`
--------------
This module provides an interface for reading and writing the "property list"
XML files used mainly by Mac OS X.
The property list (``.plist``) file format is a simple XML pickle supporting
basic object types, like dictionaries, lists, numbers and strings.  Usually the
top level object is a dictionary.
Values can be strings, integers, floats, booleans, tuples, lists, dictionaries
(but only with string keys), :class:`Data` or :class:`datetime.datetime`
objects.  String values (including dictionary keys) may be unicode strings --
they will be written out as UTF-8.
The ``<data>`` plist type is supported through the :class:`Data` class.  This is
a thin wrapper around a Python string.  Use :class:`Data` if your strings
contain control characters.
.. seealso::
   `PList manual page <https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/plist.5.html>`_
      Apple's documentation of the file format.
This module defines the following functions:
.. function:: readPlist(pathOrFile)
   Read a plist file. *pathOrFile* may either be a file name or a (readable)
   file object.  Return the unpacked root object (which usually is a
   dictionary).
   The XML data is parsed using the Expat parser from :mod:`xml.parsers.expat`
   -- see its documentation for possible exceptions on ill-formed XML.
   Unknown elements will simply be ignored by the plist parser.
.. function:: writePlist(rootObject, pathOrFile)
    Write *rootObject* to a plist file. *pathOrFile* may either be a file name
    or a (writable) file object.
    A :exc:`TypeError` will be raised if the object is of an unsupported type or
    a container that contains objects of unsupported types.
.. function:: readPlistFromString(data)
   Read a plist from a string.  Return the root object.
.. function:: writePlistToString(rootObject)
   Return *rootObject* as a plist-formatted string.
.. function:: readPlistFromResource(path, restype='plst', resid=0)
    Read a plist from the resource with type *restype* from the resource fork of
    *path*.  Availability: Mac OS X.
    .. note::
       In Python 3.x, this function has been removed.
.. function:: writePlistToResource(rootObject, path, restype='plst', resid=0)
    Write *rootObject* as a resource with type *restype* to the resource fork of
    *path*.  Availability: Mac OS X.
    .. note::
       In Python 3.x, this function has been removed.
The following class is available:
.. class:: Data(data)
   Return a "data" wrapper object around the string *data*.  This is used in
   functions converting from/to plists to represent the ``<data>`` type
   available in plists.
   It has one attribute, :attr:`data`, that can be used to retrieve the Python
   string stored in it.
Examples
--------
Generating a 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!>",
            aUnicodeValue=u'M\xe4ssig, Ma\xdf',
            aTrueValue=True,
            aFalseValue=False,
        ),
        someData = Data("<binary gunk>"),
        someMoreData = Data("<lots of binary gunk>" * 10),
        aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),
    )
    # unicode keys are possible, but a little awkward to use:
    pl[u'\xc5benraa'] = "That was a unicode key."
    writePlist(pl, fileName)
Parsing a plist::
    pl = readPlist(pathOrFile)
    print pl["aKey"]
 |