Содержание страницы
plistlib – создание и разбор файлов Mac OS X .plist¶plistlib – Generate and parse Mac OS X .plist files
Исходный код: Lib/plistlib.py
Этот модуль предоставляет интерфейс для чтения и записи файлов «property list» (списков свойств), используемых в основном в Mac OS X, и поддерживает как двоичные, так и XML-файлы plist.
Формат файла списка свойств (.plist) – это простая сериализация, поддерживающая базовые типы объектов: словари, списки, числа и строки. Обычно корневой объект является словарём.
Для записи и разбора plist-файла используйте функции dump() и load().
Для работы с plist-данными в виде объектов bytes используйте dumps()
и loads().
Значениями могут быть строки, целые числа, числа с плавающей запятой, булевы значения, кортежи, списки, словари
(но только со строковыми ключами), объекты Data, bytes, bytesarray
или datetime.datetime.
Изменено в версии 3.4: Новый API, старый API помечен как устаревший. Добавлена поддержка бинарного формата списков свойств.
Изменено в версии 3.8: Добавлена поддержка чтения и записи токенов ... в бинарных файлах списков свойств, используемых NSKeyedArchiver и NSKeyedUnarchiver.
См. также
- Страница руководства PList
Документация Apple по формату файлов.
Этот модуль определяет следующие функции:
-
plistlib.load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)¶ Читает plist-файл. fp должен быть читаемым бинарным файловым объектом. Возвращает распакованный корневой объект (обычно это словарь).
Параметр fmt задаёт формат файла; допустимы следующие значения:
None: Автоопределение формата файлаFMT_XML: Формат XMLFMT_BINARY: Бинарный формат plist
Если 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 в 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)¶ Возвращает value в виде bytes-объекта в формате plist. См. документацию для
dump()с описанием ключевых аргументов этой функции.Новое в версии 3.4.
Следующие функции устарели:
-
plistlib.readPlist(pathOrFile)¶ Читает plist-файл. pathOrFile может быть именем файла или (читаемым и бинарным) файловым объектом. Возвращает распакованный корневой объект (который обычно является словарём).
Эта функция вызывает
load()для выполнения фактической работы; за объяснением именованных аргументов обратитесь к документацииthat function.Устарело с версии 3.4: Вместо этого используйте
load().Изменено в версии 3.7: Значения словарей в результате теперь являются обычными словарями. Доступ по атрибутам для получения элементов этих словарей больше не поддерживается.
-
plistlib.writePlist(rootObject, pathOrFile)¶ Записывает rootObject в XML plist-файл. pathOrFile может быть именем файла или (доступным для записи и бинарным) файловым объектом
Устарело с версии 3.4: Вместо этого используйте
dump().
-
plistlib.readPlistFromBytes(data)¶ Читает plist-данные из объекта bytes. Возвращает корневой объект.
Описание именованных аргументов см. в
load().Устарело с версии 3.4: Вместо этого используйте
loads().Изменено в версии 3.7: Значения словарей в результате теперь являются обычными словарями. Доступ по атрибутам для получения элементов этих словарей больше не поддерживается.
-
plistlib.writePlistToBytes(rootObject)¶ Возвращает rootObject в виде объекта bytes, отформатированного как XML plist.
Устарело с версии 3.4: Вместо этого используйте
dumps().
Доступны следующие классы:
-
class
plistlib.Data(data)¶ Возвращает объект-обёртку «data» вокруг объекта bytes data. Он используется в функциях преобразования из plist-файлов и в plist-файлы для представления типа
<data>, доступного в plist-файлах.У него есть один атрибут,
data, который можно использовать для получения хранящегося в нём Python-объекта bytes.Устарело с версии 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.
Примеры¶Examples
Генерация 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"])