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