plistlib — Генерация и разбор файлов Apple .plist

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


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

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

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

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

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

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

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

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

См.также

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

Документация 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)

Загрузка списка из объекта байтов. Объяснение аргументов ключевых слов см. в load().

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

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

Записать значение в plist-файл. Fp должен быть записываемым двоичным файловым объектом.

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

  • FMT_XML: XML-форматированный plist-файл

  • FMT_BINARY: Файл plist в двоичном формате

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

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

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

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

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

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

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

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

Предлагаются следующие классы:

class plistlib.UID(data)

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

Он имеет один атрибут data, который может быть использован для получения значения UID в формате int. data должно находиться в диапазоне 0 <= data < 2**64.

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

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

plistlib.FMT_XML

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

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

plistlib.FMT_BINARY

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

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

Примеры

Генерация 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"])
Вернуться на верх