plistlib — Generate and parse Apple .plist files¶
Вихідний код: Lib/plistlib.py
Цей модуль надає інтерфейс для читання та запису файлів «списку властивостей», які використовуються Apple, переважно в macOS та iOS. Цей модуль підтримує двійкові та XML-файли plist.
Формат файлу списку властивостей (.plist) — це проста серіалізація, яка підтримує базові типи об’єктів, як-от словники, списки, числа та рядки. Зазвичай об’єктом верхнього рівня є словник.
Щоб вивести та проаналізувати файл plist, використовуйте функції dump() і load().
To work with plist data in bytes objects, use dumps()
and loads().
Значеннями можуть бути рядки, цілі числа, числа з плаваючою точкою, логічні значення, кортежі, списки, словники (але лише з рядковими ключами), об’єкти bytes, bytearray або datetime.datetime.
Змінено в версії 3.4: Новий API, старий API застарів. Додано підтримку бінарних форматів plists.
Змінено в версії 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.The parser raises
InvalidFileExceptionwhen the file cannot be parsed.Added in version 3.4.
- plistlib.loads(data, *, fmt=None, dict_type=dict)¶
Load a plist from a bytes object. See
load()for an explanation of the keyword arguments.Added in version 3.4.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶
Write value to a plist file. fp should be a writable, binary file object.
Аргумент fmt визначає формат файлу plist і може бути одним із таких значень:
FMT_XML: Plist-файл у форматі XMLFMT_BINARY: файл plist у двійковому форматі
Якщо sort_keys має значення true (за замовчуванням), ключі для словників будуть записані до plist у відсортованому порядку, інакше вони будуть записані в порядку ітерацій словника.
Якщо skipkeys має значення false (за замовчуванням), функція викликає
TypeError, коли ключ словника не є рядком, інакше такі ключі пропускаються.Якщо тип об’єкта не підтримується або контейнер містить об’єкти непідтримуваних типів, виникне
TypeError.Помилка
OverflowErrorбуде викликана для цілих значень, які не можуть бути представлені в (бінарних) файлах plist.Added in version 3.4.
- plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶
Повертає значення як об’єкт bytes у форматі plist. Перегляньте документацію для
dump()для пояснення ключових аргументів цієї функції.Added in version 3.4.
Доступні такі класи:
- class plistlib.UID(data)¶
Обгортає
int. Це використовується під час читання або запису даних, закодованих NSKeyedArchiver, які містять UID (див. посібник PList).It has one attribute,
data, which can be used to retrieve the int value of the UID.datamust be in the range0 <= data < 2**64.Added in version 3.8.
Доступні такі константи:
- plistlib.FMT_XML¶
Формат XML для файлів plist.
Added in version 3.4.
- plistlib.FMT_BINARY¶
Двійковий формат для файлів plist
Added in version 3.4.
The module defines the following exceptions:
- exception plistlib.InvalidFileException¶
Raised when a file cannot be parsed.
Added in version 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"])