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.10/library/plistlib.html