plistlib.md
1> **Источник:** https://python-all.ru/3.8/library/plistlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`plistlib`](https://python-all.ru/3.8/library/plistlib.html#module-plistlib) – создание и разбор файлов Mac OS X `.plist`89**Исходный код:** [Lib/plistlib.py](https://python-all.ru/src/3.8/Lib/plistlib.py)1011---1213Этот модуль предоставляет интерфейс для чтения и записи файлов «property list» (списков свойств), используемых в основном в Mac OS X, и поддерживает как двоичные, так и XML-файлы plist.1415Формат файла списка свойств (`.plist`) – это простая сериализация, поддерживающая базовые типы объектов: словари, списки, числа и строки. Обычно корневой объект является словарём.1617Для записи и разбора plist-файла используйте функции [`dump()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.dump) и [`load()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.load).1819Для работы с plist-данными в виде объектов bytes используйте [`dumps()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.dumps) и [`loads()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.loads).2021Значениями могут быть строки, целые числа, числа с плавающей запятой, булевы значения, кортежи, списки, словари (но только со строковыми ключами), объекты [`Data`](https://python-all.ru/3.8/library/plistlib.html#plistlib.Data), [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes), `bytesarray` или [`datetime.datetime`](https://python-all.ru/3.8/library/datetime.html#datetime.datetime).2223Изменено в версии 3.4: Новый API, старый API помечен как устаревший. Добавлена поддержка бинарного формата списков свойств.2425Изменено в версии 3.8: Добавлена поддержка чтения и записи токенов [...](https://python-all.ru/3.8/library/plistlib.html#plistlib.UID) в бинарных файлах списков свойств, используемых NSKeyedArchiver и NSKeyedUnarchiver.2627> **См. также**28>29> **[Страница руководства PList](https://python-all.ru/3.8/library/plistlib.html)**30>31> Документация Apple по формату файлов.3233Этот модуль определяет следующие функции:3435#### `plistlib.load(fp, *, fmt=None, use_builtin_types=True, dict_type=dict)`3637Читает plist-файл. *fp* должен быть читаемым бинарным файловым объектом. Возвращает распакованный корневой объект (обычно это словарь).3839Параметр *fmt* задаёт формат файла; допустимы следующие значения:4041- [`None`](https://python-all.ru/3.8/library/constants.html#None): Автоопределение формата файла42- [`FMT_XML`](https://python-all.ru/3.8/library/plistlib.html#plistlib.FMT_XML): Формат XML43- [`FMT_BINARY`](https://python-all.ru/3.8/library/plistlib.html#plistlib.FMT_BINARY): Бинарный формат plist4445Если *use\_builtin\_types* имеет значение true (по умолчанию), то бинарные данные будут возвращены как экземпляры [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes), иначе – как экземпляры [`Data`](https://python-all.ru/3.8/library/plistlib.html#plistlib.Data).4647Параметр *dict\_type* задаёт тип, используемый для словарей, читаемых из plist-файла.4849XML-данные для формата [`FMT_XML`](https://python-all.ru/3.8/library/plistlib.html#plistlib.FMT_XML) разбираются с помощью парсера Expat из [`xml.parsers.expat`](https://python-all.ru/3.8/library/pyexpat.html#module-xml.parsers.expat). Обратитесь к его документации за информацией о возможных исключениях при некорректном XML. Неизвестные элементы просто игнорируются парсером plist.5051Парсер бинарного формата вызывает `InvalidFileException` когда файл не удаётся разобрать.5253Новое в версии 3.4.5455#### `plistlib.loads(data, *, fmt=None, use_builtin_types=True, dict_type=dict)`5657Загружает plist из байтового объекта. Пояснение именованных аргументов см. в [`load()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.load).5859Новое в версии 3.4.6061#### `plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)`6263Записывает *value* в plist-файл. *Fp* должен быть записываемым бинарным файловым объектом.6465Аргумент *fmt* задаёт формат plist-файла и может принимать одно из следующих значений:6667- [`FMT_XML`](https://python-all.ru/3.8/library/plistlib.html#plistlib.FMT_XML): plist-файл в формате XML68- [`FMT_BINARY`](https://python-all.ru/3.8/library/plistlib.html#plistlib.FMT_BINARY): plist-файл в бинарном формате6970Если *sort\_keys* имеет значение true (по умолчанию), ключи словарей записываются в plist в отсортированном порядке, иначе – в порядке обхода словаря.7172Если *skipkeys* равен false (по умолчанию), функция возбуждает [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError), когда ключ словаря не является строкой; в противном случае такие ключи пропускаются.7374[`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError) будет возбуждено, если объект имеет неподдерживаемый тип или является контейнером, содержащим объекты неподдерживаемых типов.7576[`OverflowError`](https://python-all.ru/3.8/library/exceptions.html#OverflowError) будет возбуждено для целочисленных значений, которые не могут быть представлены в (бинарных) файлах plist.7778Новое в версии 3.4.7980#### `plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False)`8182Возвращает *value* в виде bytes-объекта в формате plist. См. документацию для [`dump()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.dump) с описанием ключевых аргументов этой функции.8384Новое в версии 3.4.8586Следующие функции устарели:8788#### `plistlib.readPlist(pathOrFile)`8990Читает plist-файл. *pathOrFile* может быть именем файла или (читаемым и бинарным) файловым объектом. Возвращает распакованный корневой объект (который обычно является словарём).9192Эта функция вызывает [`load()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.load) для выполнения фактической работы; за объяснением именованных аргументов обратитесь к документации [`that function`](https://python-all.ru/3.8/library/plistlib.html#plistlib.load).9394Устарело с версии 3.4: Вместо этого используйте [`load()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.load).9596Изменено в версии 3.7: Значения словарей в результате теперь являются обычными словарями. Доступ по атрибутам для получения элементов этих словарей больше не поддерживается.9798#### `plistlib.writePlist(rootObject, pathOrFile)`99100Записывает *rootObject* в XML plist-файл. *pathOrFile* может быть именем файла или (доступным для записи и бинарным) файловым объектом101102Устарело с версии 3.4: Вместо этого используйте [`dump()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.dump).103104#### `plistlib.readPlistFromBytes(data)`105106Читает plist-данные из объекта bytes. Возвращает корневой объект.107108Описание именованных аргументов см. в [`load()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.load).109110Устарело с версии 3.4: Вместо этого используйте [`loads()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.loads).111112Изменено в версии 3.7: Значения словарей в результате теперь являются обычными словарями. Доступ по атрибутам для получения элементов этих словарей больше не поддерживается.113114#### `plistlib.writePlistToBytes(rootObject)`115116Возвращает *rootObject* в виде объекта bytes, отформатированного как XML plist.117118Устарело с версии 3.4: Вместо этого используйте [`dumps()`](https://python-all.ru/3.8/library/plistlib.html#plistlib.dumps).119120Доступны следующие классы:121122#### `class plistlib.Data(data)`123124Возвращает объект-обёртку «data» вокруг объекта bytes *data*. Он используется в функциях преобразования из plist-файлов и в plist-файлы для представления типа `<data>`, доступного в plist-файлах.125126У него есть один атрибут, `data`, который можно использовать для получения хранящегося в нём Python-объекта bytes.127128Устарело с версии 3.4: Вместо этого используйте объект [`bytes`](https://python-all.ru/3.8/library/stdtypes.html#bytes).129130#### `class plistlib.UID(data)`131132Обёртка для [`int`](https://python-all.ru/3.8/library/functions.html#int). Используется при чтении или записи данных, закодированных NSKeyedArchiver, которые содержат UID (см. руководство по PList).133134У него есть один атрибут, `data`, который можно использовать для получения целочисленного значения UID. `data` должен находиться в диапазоне *0 \<= data \< 2\*\*64*.135136Новое в версии 3.8.137138Доступны следующие константы:139140#### `plistlib.FMT_XML`141142Формат XML для файлов plist.143144Новое в версии 3.4.145146#### `plistlib.FMT_BINARY`147148Бинарный формат для файлов plist149150Новое в версии 3.4.151152## Примеры153154Генерация plist:155156```python157pl = dict(158 aString = "Doodah",159 aList = ["A", "B", 12, 32.1, [1, 2, 3]],160 aFloat = 0.1,161 anInt = 728,162 aDict = dict(163 anotherString = "<hello & hi there!>",164 aThirdString = "M\xe4ssig, Ma\xdf",165 aTrueValue = True,166 aFalseValue = False,167 ),168 someData = b"<binary gunk>",169 someMoreData = b"<lots of binary gunk>" * 10,170 aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),171)172with open(fileName, 'wb') as fp:173 dump(pl, fp)174```175176Разбор plist:177178```python179with open(fileName, 'rb') as fp:180 pl = load(fp)181print(pl["aKey"])182```183