Документация Python неофициальный перевод
Содержание страницы

plistlib – создание и разбор файлов Mac OS X .plistplistlib – 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 помечен как устаревший. Добавлена поддержка бинарного формата списков свойств.

См. также

Страница руководства PList

Документация Apple по формату файлов.

Этот модуль определяет следующие функции:

plistlib.load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)

Читает plist-файл. fp должен быть читаемым бинарным файловым объектом. Возвращает распакованный корневой объект (обычно это словарь).

Параметр fmt задаёт формат файла; допустимы следующие значения:

  • None: Автоопределение формата файла

  • FMT_XML: Формат XML

  • FMT_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-файл в формате XML

  • 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 в виде 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.

Доступны следующие константы:

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"])