plistlib
— Создание и парсинг файлов Mac OS .plist
Модуль предоставляет интерфейс для чтения и записи файлов «списка свойств», используемых в основном Mac OS X и поддерживающие как бинарные, так и XML-файлы.
Формат файла списка свойств (.plist
) представляет собой простую
сериализацию, поддерживающую базовые типы объектов, такие как словари, списки,
числа и строки. Обычно объект верхнего уровня является словарем.
Для записи и синтаксического анализа файла plist используйте функции
dump()
и load()
.
Для работы с данными plist в байтах объектов используйте dumps()
и
loads()
.
Значениями могут быть строки, целые числа, числа с плавающей точкой, були, кортежи,
списки, словари (но только с ключами строка), Data
, bytes
,
bytesarray
или datetime.datetime
объекты.
Изменено в версии 3.4: Новый API, старый API устарел. Добавлена поддержка бинарных plist форматов.
Изменено в версии 3.8: Добавлена поддержка чтения и записи маркеров UID
в двоичных plist, как
используемый NSKeyedArchiver и NSKeyedUnarchiver.
См.также
- PList страница справочника
- Документация Apple по формату файлов.
Модуль определяет следующие функции:
-
plistlib.
load
(fp, *, fmt=None, use_builtin_types=True, dict_type=dict) Прочитать файл plist. fp должен быть читаемым и двоичным файловым объектом. Возвращает распакованный корневой объект (который обычно является словарем).
fmt - формат файла, и следующие значения - valid:
None
: автообнаружение формата файлаFMT_XML
: формат файла XMLFMT_BINARY
: двоичный формат списка
Если use_builtin_types будет true (по умолчанию), то двоичные данные будут возвращенный как сущности
bytes
, иначе это - возвращенный как сущностиData
.dict_type - это тип используемый для словарей, считываемых из файла plist.
XML-данные для формата
FMT_XML
разобраны, используя Expat парсер изxml.parsers.expat
- видят его документацию для возможных исключений на плохо сформированном XML. Неизвестные элементы будут просто игнорироваться plist парсер.Парсер для двоичного формата вызывает
InvalidFileException
, когда файл не может быть проанализирован.Добавлено в версии 3.4.
-
plistlib.
loads
(data, *, fmt=None, use_builtin_types=True, dict_type=dict) Загрузка plist из объекта в байтах. Объяснение аргументов
load()
см. в ключевых аргументах.Добавлено в версии 3.4.
-
plistlib.
dump
(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False) Запись value в файл списка. Fp должен быть объектом двоичного файла с возможностью записи.
Аргумент fmt определяет формат plist файла и может быть одним из следующих значения:
FMT_XML
: файл списка в формате XMLFMT_BINARY
: двоичный файл plist
Когда sort_keys будет истиной (по умолчанию), ключи для словарей будут написаны plist в сортированном заказе, иначе они будут написаны в итеративном заказе словаря.
Когда skipkeys false (по умолчанию), функция вызывает
TypeError
, когда ключ словаря не строка, иначе такие ключи пропущены.Будет вызван
TypeError
, если у объекта будет неподдерживаемый тип или контейнер, который содержит объекты неподдержанных типов.Будет вызван
OverflowError
для целочисленного значения, который не может быть представлен в (наборе из двух предметов) plist файлы.Добавлено в версии 3.4.
-
plistlib.
dumps
(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False) Возвращает value как объект байтов в формате списка. См. документацию для
dump()
для объяснения ключевых аргументов этой функции.Добавлено в версии 3.4.
Следующие функции устарели:
-
plistlib.
readPlist
(pathOrFile) Читать файл plist. pathOrFile может быть именем файла или (читаемым и двоичным) объектом файла. Возвращает распакованный корневой объект (который обычно является словарем).
Функция вызывает
load()
для выполнения фактической работы, см. документациюthat function
для объяснения ключевых аргументов.Не рекомендуется, начиная с версии 3.4: Вместо этого используйте
load()
.Изменено в версии 3.7: Dict значения в результате теперь нормальные словари. Вы больше не можете использовать атрибут доступ для доступа к элементам этих словарей.
-
plistlib.
writePlist
(rootObject, pathOrFile) Записывает rootObject в XML-файл списка. pathOrFile может быть именем файла или (доступным для записи и двоичным) объектом файла
Не рекомендуется, начиная с версии 3.4: Вместо этого используйте
dump()
.
-
plistlib.
readPlistFromBytes
(data) Чтение данных plist из объекта в байтах. Возвращает корневого объекта.
Описание аргументов
load()
см. в разделе ключевой.Не рекомендуется, начиная с версии 3.4: Вместо этого используйте
loads()
.Изменено в версии 3.7: Dict значения в результате теперь нормальные словари. Вы больше не можете использовать атрибут доступ для доступа к элементам этих словарей.
-
plistlib.
writePlistToBytes
(rootObject) Возвращает rootObject как объект байтов в формате XML plist.
Не рекомендуется, начиная с версии 3.4: Вместо нее используйте
dumps()
.
Доступны следующие классы:
-
class
plistlib.
Data
(data) Возвращает объект-оболочку «data» вокруг байтового объекта data. Это используемый в функциях преобразования из/в списки для представления типа
<data>
, доступных в списках.У этого есть один атрибут,
data
, который может использоваться для восстановления байтового объекта Python, хранивший в нем.Не рекомендуется, начиная с версии 3.4: Вместо нее используйте объект
bytes
.
-
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:
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"])