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.Синтаксичний аналізатор двійкового формату викликає
InvalidFileException
, коли файл не може бути проаналізований.Нове в версії 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.Нове в версії 3.4.
- plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)¶
Запишіть значення у файл plist. Fp має бути доступним для запису двійковим файловим об’єктом.
Аргумент fmt визначає формат файлу plist і може бути одним із таких значень:
FMT_XML
: Plist-файл у форматі XMLFMT_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)¶
Повертає значення як об’єкт bytes у форматі plist. Перегляньте документацію для
dump()
для пояснення ключових аргументів цієї функції.Нове в версії 3.4.
Доступні такі класи:
- class plistlib.UID(data)¶
Обгортає
int
. Це використовується під час читання або запису даних, закодованих NSKeyedArchiver, які містять UID (див. посібник PList).Він має один атрибут,
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"])