> **Источник:** https://python-all.ru/3.2/library/plistlib.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 13.5. [`plistlib`](https://python-all.ru/3.2/library/plistlib.html#module-plistlib) – создание и разбор файлов Mac OS X `.plist`

**Исходный код:** [Lib/plistlib.py](https://python-all.ru/src/3.2/Lib/plistlib.py)

---

Этот модуль предоставляет интерфейс для чтения и записи XML-файлов «property list», используемых в основном в Mac OS X.

Формат файла property list (`.plist`) – это простой XML-сериализатор, поддерживающий базовые типы объектов, такие как словари, списки, числа и строки. Обычно объект верхнего уровня является словарём.

Для записи и разбора plist-файла используйте функции [`writePlist()`](https://python-all.ru/3.2/library/plistlib.html#plistlib.writePlist) и [`readPlist()`](https://python-all.ru/3.2/library/plistlib.html#plistlib.readPlist).

Для работы с данными plist в виде объектов bytes используйте [`writePlistToBytes()`](https://python-all.ru/3.2/library/plistlib.html#plistlib.writePlistToBytes) и [`readPlistFromBytes()`](https://python-all.ru/3.2/library/plistlib.html#plistlib.readPlistFromBytes).

Значения могут быть строками, целыми числами, числами с плавающей запятой, булевыми значениями, кортежами, списками, словарями (только со строковыми ключами), объектами [`Data`](https://python-all.ru/3.2/library/plistlib.html#plistlib.Data) или [`datetime.datetime`](https://python-all.ru/3.2/library/datetime.html#datetime.datetime). Строковые значения (включая ключи словарей) должны быть строками Unicode – они будут записаны в UTF-8.

Тип plist `<data>` поддерживается через класс [`Data`](https://python-all.ru/3.2/library/plistlib.html#plistlib.Data). Это тонкая обёртка вокруг объекта bytes в Python. Используйте [`Data`](https://python-all.ru/3.2/library/plistlib.html#plistlib.Data), если строки содержат управляющие символы.

> **См. также**
>
> **[Страница руководства PList](https://python-all.ru/3.2/library/plistlib.html)**
>
> Документация Apple по формату файлов.

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

#### `plistlib.readPlist(pathOrFile)`

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

XML-данные разбираются с помощью синтаксического анализатора Expat из [`xml.parsers.expat`](https://python-all.ru/3.2/library/pyexpat.html#module-xml.parsers.expat) – обратитесь к его документации за сведениями о возможных исключениях при некорректном XML. Неизвестные элементы просто игнорируются анализатором plist.

#### `plistlib.writePlist(rootObject, pathOrFile)`

Записывает *rootObject* в файл plist. *pathOrFile* может быть именем файла или файловым объектом, открытым для записи.

Исключение [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError) будет возбуждено, если объект имеет неподдерживаемый тип или является контейнером, содержащим объекты неподдерживаемых типов.

#### `plistlib.readPlistFromBytes(data)`

Читает plist-данные из объекта bytes. Возвращает корневой объект.

#### `plistlib.writePlistToBytes(rootObject)`

Возвращает *rootObject* в виде bytes-объекта в формате plist.

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

#### `class plistlib.Data(data)`

Возвращает объект-обёртку «data» вокруг байтового объекта *data*. Используется в функциях преобразования из plist-формата и обратно для представления типа `<data>`, доступного в plist-файлах.

У него есть один атрибут `data`, который можно использовать для получения хранящегося в нём объекта bytes языка Python.

## 13.5.1. Примеры

Генерация plist:

```python
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 = Data(b"<binary gunk>"),
    someMoreData = Data(b"<lots of binary gunk>" * 10),
    aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),
)
writePlist(pl, fileName)
```

Разбор plist:

```python
pl = readPlist(pathOrFile)
print(pl["aKey"])
```
