Содержание страницы
14.5. plistlib – Generate and parse Mac OS X .plist files¶
Исходный код: Lib/plistlib.py
Этот модуль предоставляет интерфейс для чтения и записи файлов «property list» (списков свойств), используемых в основном в Mac OS X, и поддерживает как двоичные, так и XML-файлы plist.
Формат файла списка свойств (.plist) – это простая сериализация, поддерживающая базовые типы объектов: словари, списки, числа и строки. Обычно корневой объект является словарём.
Для записи и разбора plist-файла используйте функции dump() и load().
Для работы с plist-данными в виде объектов bytes используйте dumps()
и loads().
Значениями могут быть строки, целые числа, числа с плавающей запятой, булевы значения, кортежи, списки, словари
(но только со строковыми ключами), объекты Data, bytes, bytesarray
или datetime.datetime.
Изменено в версии 3.4: Новый API, старый API помечен как устаревший. Добавлена поддержка бинарного формата списков свойств.
См. также
- Страница руководства PList
Документация Apple по формату файлов.
Этот модуль определяет следующие функции:
-
plistlib.load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)¶ Читает plist-файл. fp должен быть читаемым бинарным файловым объектом. Возвращает распакованный корневой объект (обычно это словарь).
Параметр fmt задаёт формат файла; допустимы следующие значения:
None: Автоопределение формата файлаFMT_XML: Формат XMLFMT_BINARY: Бинарный формат plist
Если use_builtin_types имеет значение true (по умолчанию), то бинарные данные будут возвращены как экземпляры
bytes, иначе – как экземплярыData.The dict_type is the type used for dictionaries that are read from the plist file. The exact structure of the plist can be recovered by using
collections.OrderedDict(although the order of keys shouldn’t be important in plist files).XML-данные для формата
FMT_XMLразбираются с помощью парсера Expat изxml.parsers.expat. Обратитесь к его документации за информацией о возможных исключениях при некорректном XML. Неизвестные элементы просто игнорируются парсером plist.Парсер бинарного формата вызывает
InvalidFileExceptionкогда файл не удаётся разобрать.Новое в версии 3.4.
-
plistlib.loads(data, *, fmt=None, use_builtin_types=True, dict_type=dict)¶ Загружает plist из байтового объекта. Пояснение именованных аргументов см. в
load().Новое в версии 3.4.
-
plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶ Записывает value в plist-файл. Fp должен быть записываемым бинарным файловым объектом.
Аргумент fmt задаёт формат plist-файла и может принимать одно из следующих значений:
FMT_XML: plist-файл в формате XMLFMT_BINARY: plist-файл в бинарном формате
Если sort_keys имеет значение true (по умолчанию), ключи словарей записываются в plist в отсортированном порядке, иначе – в порядке обхода словаря.
Если skipkeys равен false (по умолчанию), функция возбуждает
TypeError, когда ключ словаря не является строкой; в противном случае такие ключи пропускаются.TypeErrorбудет возбуждено, если объект имеет неподдерживаемый тип или является контейнером, содержащим объекты неподдерживаемых типов.OverflowErrorбудет возбуждено для целочисленных значений, которые не могут быть представлены в (бинарных) файлах plist.Новое в версии 3.4.
-
plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶ Возвращает value в виде bytes-объекта в формате plist. См. документацию для
dump()с описанием ключевых аргументов этой функции.Новое в версии 3.4.
Следующие функции устарели:
-
plistlib.readPlist(pathOrFile)¶ Читает plist-файл. pathOrFile может быть именем файла или (читаемым и бинарным) файловым объектом. Возвращает распакованный корневой объект (который обычно является словарём).
Эта функция вызывает
load()для выполнения фактической работы; за объяснением именованных аргументов обратитесь к документацииthat function.Примечание
Dict values in the result have a
__getattr__method that defers to__getitem_. This means that you can use attribute access to access items of these dictionaries.Устарело с версии 3.4: Вместо этого используйте
load().
-
plistlib.writePlist(rootObject, pathOrFile)¶ Записывает rootObject в XML plist-файл. pathOrFile может быть именем файла или (доступным для записи и бинарным) файловым объектом
Устарело с версии 3.4: Вместо этого используйте
dump().
-
plistlib.readPlistFromBytes(data)¶ Читает plist-данные из объекта bytes. Возвращает корневой объект.
Описание именованных аргументов см. в
load().Примечание
Dict values in the result have a
__getattr__method that defers to__getitem_. This means that you can use attribute access to access items of these dictionaries.Устарело с версии 3.4: Вместо этого используйте
loads().
-
plistlib.writePlistToBytes(rootObject)¶ Возвращает rootObject в виде объекта bytes, отформатированного как XML plist.
Устарело с версии 3.4: Вместо этого используйте
dumps().
Доступны следующие классы:
-
Dict([dict]): Return an extended mapping object with the same value as dictionary dict.
This class is a subclass of
dictwhere attribute access can be used to access items. That is,aDict.keyis the same asaDict['key']for getting, setting and deleting items in the mapping.Устарело с версии 3.0.
-
class
plistlib.Data(data)¶ Возвращает объект-обёртку «data» вокруг объекта bytes data. Он используется в функциях преобразования из plist-файлов и в plist-файлы для представления типа
<data>, доступного в plist-файлах.У него есть один атрибут,
data, который можно использовать для получения хранящегося в нём Python-объекта bytes.Устарело с версии 3.4: Вместо этого используйте объект
bytes.
Доступны следующие константы:
-
plistlib.FMT_XML¶ Формат XML для файлов plist.
Новое в версии 3.4.
-
plistlib.FMT_BINARY¶ Бинарный формат для файлов plist
Новое в версии 3.4.
14.5.1. Примеры¶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"])