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

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

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


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

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

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

Для работы с plist-данными в виде объектов bytes используйте 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)

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

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

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

  • FMT_XML: Формат XML

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

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

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

Парсер бинарного формата вызывает InvalidFileException когда файл не удаётся разобрать.

Новое в версии 3.4.

plistlib.loads(data, *, fmt=None, 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-файл в формате XML

  • FMT_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.

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

class plistlib.UID(data)

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

У него есть один атрибут, data, с помощью которого можно получить целочисленное значение UID. data должно находиться в диапазоне 0 <= data < 2**64.

Новое в версии 3.8.

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

plistlib.FMT_XML

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

Новое в версии 3.4.

plistlib.FMT_BINARY

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

Новое в версии 3.4.

Примеры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"])