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

plistlib.md

170 строк · 10.5 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/library/plistlib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `plistlib` – Генерирование и разбор файлов `.plist` Apple89**Исходный код:** [Lib/plistlib.py](https://python-all.ru/src/3.13/Lib/plistlib.py)1011---1213Этот модуль предоставляет интерфейс для чтения и записи файлов «списка свойств» (property list), используемых Apple, в первую очередь на macOS и iOS. Модуль поддерживает как бинарные, так и XML plist-файлы.1415Формат файла списка свойств (`.plist`) – это простая сериализация, поддерживающая базовые типы объектов: словари, списки, числа и строки. Обычно корневой объект является словарём.1617Для записи и разбора plist-файла используйте функции [`dump()`](https://python-all.ru/3.13/library/plistlib.html#plistlib.dump) и [`load()`](https://python-all.ru/3.13/library/plistlib.html#plistlib.load).1819Для работы с plist-данными в объектах bytes или string используйте [`dumps()`](https://python-all.ru/3.13/library/plistlib.html#plistlib.dumps) и [`loads()`](https://python-all.ru/3.13/library/plistlib.html#plistlib.loads).2021Значениями могут быть строки, целые числа, числа с плавающей запятой, булевы значения, кортежи, списки, словари (но только со строковыми ключами), объекты [`bytes`](https://python-all.ru/3.13/library/stdtypes.html#bytes), [`bytearray`](https://python-all.ru/3.13/library/stdtypes.html#bytearray) или [`datetime.datetime`](https://python-all.ru/3.13/library/datetime.html#datetime.datetime).2223Изменено в версии 3.4: Новый API, старый API помечен как устаревший. Добавлена поддержка бинарного формата списков свойств.2425Изменено в версии 3.8: Добавлена поддержка чтения и записи токенов [...](https://python-all.ru/3.13/library/plistlib.html#plistlib.UID) в бинарных файлах списков свойств, используемых NSKeyedArchiver и NSKeyedUnarchiver.2627Изменено в версии 3.9: Старый API удалён.2829> **См. также**30>31> **[Страница руководства PList](https://python-all.ru/3.13/library/plistlib.html)**32>33> Документация Apple по формату файлов.3435Этот модуль определяет следующие функции:3637#### `plistlib.load(fp, *, fmt=None, dict_type=dict, aware_datetime=False)`3839Читает plist-файл. *fp* должен быть читаемым бинарным файловым объектом. Возвращает распакованный корневой объект (обычно это словарь).4041Параметр *fmt* задаёт формат файла; допустимы следующие значения:4243- [`None`](https://python-all.ru/3.13/library/constants.html#None): Автоопределение формата файла44- [`FMT_XML`](https://python-all.ru/3.13/library/plistlib.html#plistlib.FMT_XML): Формат XML45- [`FMT_BINARY`](https://python-all.ru/3.13/library/plistlib.html#plistlib.FMT_BINARY): Бинарный формат plist4647Параметр *dict\_type* задаёт тип, используемый для словарей, читаемых из plist-файла.4849Когда *aware\_datetime* равен true, поля с типом `datetime.datetime` будут создаваться как [aware-объект](https://python-all.ru/3.13/library/datetime.html#datetime-naive-aware), с `tzinfo` в качестве [`datetime.UTC`](https://python-all.ru/3.13/library/datetime.html#datetime.UTC).5051XML-данные для формата [`FMT_XML`](https://python-all.ru/3.13/library/plistlib.html#plistlib.FMT_XML) разбираются с помощью парсера Expat из [`xml.parsers.expat`](https://python-all.ru/3.13/library/pyexpat.html#module-xml.parsers.expat). Обратитесь к его документации за информацией о возможных исключениях при некорректном XML. Неизвестные элементы просто игнорируются парсером plist.5253Парсер возбуждает исключение [`InvalidFileException`](https://python-all.ru/3.13/library/plistlib.html#plistlib.InvalidFileException), если файл не может быть разобран.5455Добавлено в версии 3.4.5657Изменено в версии 3.13: добавлен параметр только по ключевому слову *aware\_datetime*.5859#### `plistlib.loads(data, *, fmt=None, dict_type=dict, aware_datetime=False)`6061Загружает plist из объекта bytes или string. Описание именованных аргументов см. в [`load()`](https://python-all.ru/3.13/library/plistlib.html#plistlib.load).6263Добавлено в версии 3.4.6465Изменено в версии 3.13: *data* может быть строкой, если *fmt* равен [`FMT_XML`](https://python-all.ru/3.13/library/plistlib.html#plistlib.FMT_XML).6667#### `plistlib.dump(value, fp, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)`6869Записывает *value* в plist-файл. *fp* должен быть доступным для записи бинарным файловым объектом.7071Аргумент *fmt* задаёт формат plist-файла и может принимать одно из следующих значений:7273- [`FMT_XML`](https://python-all.ru/3.13/library/plistlib.html#plistlib.FMT_XML): plist-файл в формате XML74- [`FMT_BINARY`](https://python-all.ru/3.13/library/plistlib.html#plistlib.FMT_BINARY): plist-файл в бинарном формате7576Если *sort\_keys* имеет значение true (по умолчанию), ключи словарей записываются в plist в отсортированном порядке, иначе – в порядке обхода словаря.7778Если *skipkeys* равен false (по умолчанию), функция возбуждает [`TypeError`](https://python-all.ru/3.13/library/exceptions.html#TypeError), когда ключ словаря не является строкой; в противном случае такие ключи пропускаются.7980Если *aware\_datetime* равен true и какое-либо поле типа `datetime.datetime` установлено как [объект с часовым поясом](https://python-all.ru/3.13/library/datetime.html#datetime-naive-aware), перед записью оно будет преобразовано в часовой пояс UTC.8182[`TypeError`](https://python-all.ru/3.13/library/exceptions.html#TypeError) будет возбуждено, если объект имеет неподдерживаемый тип или является контейнером, содержащим объекты неподдерживаемых типов.8384[`OverflowError`](https://python-all.ru/3.13/library/exceptions.html#OverflowError) будет возбуждено для целочисленных значений, которые не могут быть представлены в (бинарных) файлах plist.8586Добавлено в версии 3.4.8788Изменено в версии 3.13: добавлен параметр только по ключевому слову *aware\_datetime*.8990#### `plistlib.dumps(value, *, fmt=FMT_XML, sort_keys=True, skipkeys=False, aware_datetime=False)`9192Возвращает *value* в виде bytes-объекта в формате plist. См. документацию для [`dump()`](https://python-all.ru/3.13/library/plistlib.html#plistlib.dump) с описанием ключевых аргументов этой функции.9394Добавлено в версии 3.4.9596Доступны следующие классы:9798#### `class plistlib.UID(data)`99100Обёртка для [`int`](https://python-all.ru/3.13/library/functions.html#int). Используется при чтении или записи данных, закодированных NSKeyedArchiver, которые содержат UID (см. руководство по PList).101102#### `data`103104Целое значение UID. Оно должно быть в диапазоне `0 <= data < 2**64`.105106Добавлено в версии 3.8.107108Доступны следующие константы:109110#### `plistlib.FMT_XML`111112Формат XML для файлов plist.113114Добавлено в версии 3.4.115116#### `plistlib.FMT_BINARY`117118Бинарный формат для файлов plist119120Добавлено в версии 3.4.121122Модуль определяет следующие исключения:123124#### `exception plistlib.InvalidFileException`125126Возбуждается, когда файл не может быть разобран.127128Добавлено в версии 3.4.129130## Примеры131132Генерация plist:133134```python135import datetime as dt136import plistlib137138pl = dict(139    aString = "Doodah",140    aList = ["A", "B", 12, 32.1, [1, 2, 3]],141    aFloat = 0.1,142    anInt = 728,143    aDict = dict(144        anotherString = "<hello & hi there!>",145        aThirdString = "M\xe4ssig, Ma\xdf",146        aTrueValue = True,147        aFalseValue = False,148    ),149    someData = b"<binary gunk>",150    someMoreData = b"<lots of binary gunk>" * 10,151    aDate = dt.datetime.now()152)153print(plistlib.dumps(pl).decode())154```155156Разбор plist:157158```python159import plistlib160161plist = b"""<plist version="1.0">162<dict>163    <key>foo</key>164    <string>bar</string>165</dict>166</plist>"""167pl = plistlib.loads(plist)168print(pl["foo"])169```170