# `pickletools` — Tools for pickle developers

Вихідний код: Lib/pickletools.py

Цей модуль містить різні константи, що стосуються інтимних деталей модуля `pickle`, деякі розлогі коментарі щодо реалізації та кілька корисних функцій для аналізу маринованих даних. Вміст цього модуля корисний для розробників ядра Python, які працюють над `pickle`; звичайні користувачі модуля `pickle`, ймовірно, не знайдуть модуль `pickletools` доречним.

## Використання командного рядка

Нове в версії 3.2.

При виклику з командного рядка `python -m pickletools` розбере вміст одного або кількох файлів pickle. Зауважте, що якщо ви хочете бачити об’єкт Python, який зберігається в pickle, а не деталі формату pickle, ви можете замість цього використовувати `-m pickle`. Однак, якщо файл pickle, який ви хочете перевірити, походить із ненадійного джерела, `-m pickletools` є безпечнішим варіантом, оскільки він не виконує байт-код pickle.

Наприклад, з кортежем `(1, 2)`, маринованим у файлі `x.pickle`:

    $ python -m pickle x.pickle
    (1, 2)

    $ python -m pickletools x.pickle
        0: \x80 PROTO      3
        2: K    BININT1    1
        4: K    BININT1    2
        6: \x86 TUPLE2
        7: q    BINPUT     0
        9: .    STOP
    highest protocol among opcodes = 2

### Параметри командного рядка

-a, --annotate

  Додайте до кожного рядка короткий опис коду операції.

-o, --output=<file>

  Ім’я файлу, куди слід записати вихідні дані.

-l, --indentlevel=<num>

  Кількість пробілів, на які потрібно відступити новий рівень MARK.

-m, --memo

  Коли кілька об’єктів розібрано, зберігайте пам’ятку між розбираннями.

-p, --preamble=<preamble>

  Якщо вказано більше одного файлу pickle, друкуйте надану преамбулу перед кожним розбиранням.

## Програмний інтерфейс

pickletools.dis(pickle, out=None, memo=None, indentlevel=4, annotate=0)

  Виводить символічне розбирання pickle у файлоподібний об’єкт out, за умовчанням `sys.stdout`. pickle може бути рядком або файлоподібним об’єктом. memo може бути словником Python, який використовуватиметься як пам’ятка pickle; його можна використовувати для розбирання кількох маринованих пікселів, створених одним піклером. Послідовні рівні, позначені кодами операцій `MARK` у потоці, відступають пробілами indentlevel. Якщо для annotate задано ненульове значення, кожен код операції у виведених даних анотується коротким описом. Значення annotate використовується як підказка для стовпця, з якого має починатися анотація.

  Змінено в версії 3.2: Added the annotate parameter.

pickletools.genops(pickle)

  Надає iterator для всіх кодів операцій у pickle, повертаючи послідовність `(opcode, arg, pos)` потрійок. opcode є екземпляром класу `OpcodeInfo`; arg — це декодоване значення аргументу коду операції як об’єкт Python; pos - це позиція, у якій знаходиться цей код операції. pickle може бути рядком або файлоподібним об’єктом.

pickletools.optimize(picklestring)

  Повертає новий еквівалентний рядок pickle після видалення невикористаних кодів операцій `PUT`. Оптимізоване маринування коротше, займає менше часу на передачу, вимагає менше місця для зберігання та ефективніше знімає травлення.