plistlib — Генерация и парсинг файлов Apple .plist
Исходный код: Lib/plistlib.py
Этот модуль предоставляет интерфейс для чтения и записи файлов «список свойств», используемых Apple, в основном на macOS и iOS. Этот модуль поддерживает как двоичные, так и XML-файлы plist.
Формат файла списка свойств (.plist) — это простой способ сериализации, поддерживающий базовые типы объектов, такие как словари, списки, числа и строки. Обычно верхний уровень объекта — это словарь.
Для записи и парсинга файла plist используйте функции dump() и load().
Для работы с данными plist в объектах типа bytes используйте dumps() и loads().
Значения могут быть строками, целыми числами, числами с плавающей точкой, булевыми значениями, кортежами, списками, словарями (но только со строковыми ключами), bytes, bytearray или datetime.datetime объектами.
Изменено в версии 3.4: Новый API, старый API устарел. Добавлена поддержка двоичного формата plist.
Изменено в версии 3.8: Добавлена поддержка чтения и записи маркеров UID в двоичных plist, как используется в NSKeyedArchiver и NSKeyedUnarchiver.
Изменено в версии 3.9: Старый API удален.
См. также
- Документация Apple по формату файла
-
Документация 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: XML-форматированный файл plist -
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 как объект 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.
Примеры
Генерация 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"])
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/plistlib.html