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
: Формат файла XMLFMT_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"])