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
: Формат файла 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)¶
Загрузите 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 в формате XMLFMT_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"])