plistlib — Создание и парсинг файлов Mac OS .plist

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


Модуль предоставляет интерфейс для чтения и записи файлов «списка свойств», используемых в основном Mac OS X и поддерживающие как бинарные, так и XML-файлы.

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

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

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

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

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

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

См.также

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

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

plistlib.load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)

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

fmt - формат файла, и следующие значения - valid:

  • None: автообнаружение формата файла
  • FMT_XML: формат файла XML
  • FMT_BINARY: двоичный формат списка

Если use_builtin_types будет true (по умолчанию), то двоичные данные будут возвращенный как сущности bytes, иначе это - возвращенный как сущности Data.

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

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 в файл списка. Fp должен быть объектом двоичного файла с возможностью записи.

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

  • FMT_XML: файл списка в формате 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 как объект байтов в формате списка. См. документацию для dump() для объяснения ключевых аргументов этой функции.

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

Следующие функции устарели:

plistlib.readPlist(pathOrFile)

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

Эта функция вызывает load() для выполнения фактической работы, см. документацию that function для объяснения ключевых аргументов.

Не рекомендуется, начиная с версии 3.4: Use load() instead.

Изменено в версии 3.7: Dict значения в результате теперь нормальные словари. Вы больше не можете использовать атрибут доступ для доступа к элементам этих словарей.

plistlib.writePlist(rootObject, pathOrFile)

Запись rootObject в XML-файл списка. pathOrFile может быть именем файла или (доступным для записи и двоичным) объектом файла

Не рекомендуется, начиная с версии 3.4: Use dump() instead.

plistlib.readPlistFromBytes(data)

Чтение данных plist из объекта в байтах. Возвращает корневого объекта.

Описание аргументов load() см. в разделе ключевой.

Не рекомендуется, начиная с версии 3.4: Use loads() instead.

Изменено в версии 3.7: Dict значения в результате теперь нормальные словари. Вы больше не можете использовать атрибут доступ для доступа к элементам этих словарей.

plistlib.writePlistToBytes(rootObject)

Возвращает rootObject как объект байтов в формате XML plist.

Не рекомендуется, начиная с версии 3.4: Use dumps() instead.

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

class plistlib.Data(data)

Возвращает объект-оболочку «data» вокруг байтового объекта data. Это используемый в функциях преобразования из/в списки для представления типа <data>, доступных в списках.

У этого есть один атрибут, data, который может быть используемый, чтобы восстановить объект байтов Python, хранивший в нем.

Не рекомендуется, начиная с версии 3.4: Use a bytes object instead.

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.

Примеры

Создание 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"])