Документация Python неофициальный перевод
Содержание страницы

plistlib – Генерирование и разбор файлов .plist Appleplistlib – Generate and parse Apple .plist files

Исходный код: Lib/plistlib.py


Этот модуль предоставляет интерфейс для чтения и записи файлов «списка свойств» (property list), используемых Apple, в первую очередь на macOS и iOS. Модуль поддерживает как бинарные, так и XML plist-файлы.

Формат файлов property list (.plist) – это простая сериализация, поддерживающая основные типы объектов: словари, списки, числа и строки. Обычно объектом верхнего уровня является словарь или замороженный словарь.

Для записи и разбора plist-файла используйте функции dump() и load().

Для работы с plist-данными в объектах bytes или string используйте dumps() и loads().

Значениями могут быть строки, целые числа, числа с плавающей запятой, булевы значения, кортежи, списки, словари (но только со строковыми ключами), объекты bytes, bytearray или datetime.datetime.

Изменено в версии 3.4: Новый API, старый API помечен как устаревший. Добавлена поддержка бинарного формата списков свойств.

Изменено в версии 3.8: Добавлена поддержка чтения и записи токенов ... в бинарных файлах списков свойств, используемых NSKeyedArchiver и NSKeyedUnarchiver.

Изменено в версии 3.9: Старый API удалён.

См. также

Страница руководства PList

Документация Apple по формату файлов.

Этот модуль определяет следующие функции:

plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)

Читает plist-файл. fp должен быть читаемым бинарным файловым объектом. Возвращает распакованный корневой объект (обычно это словарь).

Параметр fmt задаёт формат файла; допустимы следующие значения:

  • None: Автоопределение формата файла

  • FMT_XML: Формат XML

  • FMT_BINARY: Бинарный формат plist

Параметр dict_type задаёт тип, используемый для словарей, читаемых из plist-файла.

Когда aware_datetime равен true, поля с типом datetime.datetime будут создаваться как aware-объект, с tzinfo в качестве datetime.UTC.

XML-данные для формата FMT_XML разбираются с помощью парсера Expat из xml.parsers.expat. Обратитесь к его документации за информацией о возможных исключениях при некорректном XML. Неизвестные элементы просто игнорируются парсером plist.

Парсер возбуждает исключение InvalidFileException, если файл не может быть разобран.

Добавлено в версии 3.4.

Изменено в версии 3.13: добавлен параметр только по ключевому слову aware_datetime.

plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)

Загружает plist из объекта bytes или string. Описание именованных аргументов см. в load().

Добавлено в версии 3.4.

Изменено в версии 3.13: data может быть строкой, если fmt равен FMT_XML.

plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)

Записывает value в plist-файл. fp должен быть доступным для записи бинарным файловым объектом.

Аргумент fmt задаёт формат plist-файла и может принимать одно из следующих значений:

  • FMT_XML: plist-файл в формате XML

  • FMT_BINARY: plist-файл в бинарном формате

Если sort_keys имеет значение true (по умолчанию), ключи словарей записываются в plist в отсортированном порядке, иначе – в порядке обхода словаря.

Если skipkeys равен false (по умолчанию), функция возбуждает TypeError, когда ключ словаря не является строкой; в противном случае такие ключи пропускаются.

Если aware_datetime равен true и какое-либо поле типа datetime.datetime установлено как объект с часовым поясом, перед записью оно будет преобразовано в часовой пояс UTC.

TypeError будет возбуждено, если объект имеет неподдерживаемый тип или является контейнером, содержащим объекты неподдерживаемых типов.

OverflowError будет возбуждено для целочисленных значений, которые не могут быть представлены в (бинарных) файлах plist.

Добавлено в версии 3.4.

Изменено в версии 3.13: добавлен параметр только по ключевому слову aware_datetime.

plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)

Возвращает value в виде bytes-объекта в формате plist. См. документацию для dump() с описанием ключевых аргументов этой функции.

Добавлено в версии 3.4.

Доступны следующие классы:

class plistlib.UID(data)

Обёртка для int. Используется при чтении или записи данных, закодированных NSKeyedArchiver, которые содержат UID (см. руководство по PList).

data

Целое значение UID. Оно должно быть в диапазоне 0 <= data < 2**64.

Добавлено в версии 3.8.

Доступны следующие константы:

plistlib.FMT_XML

Формат XML для файлов plist.

Добавлено в версии 3.4.

plistlib.FMT_BINARY

Бинарный формат для файлов plist

Добавлено в версии 3.4.

Модуль определяет следующие исключения:

exception plistlib.InvalidFileException

Возбуждается, когда файл не может быть разобран.

Добавлено в версии 3.4.

ПримерыExamples

Генерация plist:

import datetime as dt
import plistlib

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 = dt.datetime.now()
)
print(plistlib.dumps(pl).decode())

Разбор plist:

import plistlib

plist = b"""<plist version="1.0">
<dict>
    <key>foo</key>
    <string>bar</string>
</dict>
</plist>"""
pl = plistlib.loads(plist)
print(pl["foo"])