plistlib — Создание и анализ файлов Apple .plist

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


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

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

Чтобы записать и проанализировать файл plist, используйте функции dump() и load().

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

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

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

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

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

См.также

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)

Загрузите plist из объекта bytes. Смотрите 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 (значение по умолчанию), ключи для словарей будут записаны в список в отсортированном порядке, в противном случае они будут записаны в порядке повторения словаря.

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

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

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

Добавлено в версии 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 (см. руководство по списку).

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

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

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

plistlib.FMT_XML

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

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

plistlib.FMT_BINARY

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

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

Примеры

Создание списка plist:

import datetime
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 = datetime.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"])
Вернуться на верх