Друкарня від WE.UA

Гарне форматування з pprint

Зміст

Всіх вітаю! Сьогодні ми поговоримо про те, як зробити вивід програми гарним та зручним завдяки бібліотеці pprint у Python. Крім цього ми розберемо кожний параметр функції pprint() та подивимося на нього у дії.

Встановлення

Windows:

pip install pprint

MacOS:

pip3 install pprint

Linux:

pip install pprint

Відмінності між виведенням з print() та pprint()

Виведення з print()

Для початку давайте створимо словник і виведемо його через звичайну функцію print(), а потім порівняємо результат з виводом за допомогою pprint().

Отже, ось приклад виведення з print():

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science"]}
print(sciences)
{'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'], 'Specific': ['Electrotechnics', 'Robotics', 'Theory of probability', 'Computer Science']}

Отже, як ми бачимо це простий вивід, який виглядає не дуже гарно. Також слід розуміти, що даних у словнику може бути значно більше і тоді вивід буде виглядати менш зрозумілим.

Виведення з pprint()

Тепер спробуємо вивести ці ж дані через функцію pprint():

import pprint

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science"]}
pprint.pprint(sciences)
{'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
 'Specific': ['Electrotechnics',
              'Robotics',
              'Theory of probability',
              'Computer Science']}

Одразу бачимо різницю, бо такий вивід набато краще прочитати. Також він банально є зручнішим та гарнішим. Пропоную оновити словник, щоб там було більше вмісту і побачити результат ще раз:

import pprint

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
                         "Machine Learning"],
            "Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
                           "Embedded Systems"]}
pprint.pprint(sciences)
{'Additional': ['Hardware Programming',
                'Operating Systems',
                'Quantium Computing',
                'Data Science',
                'Embedded Systems'],
 'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
 'Specific': ['Electrotechnics',
              'Robotics',
              'Theory of probability',
              'Computer Science',
              'Machine Learning']}

Ось такий вигляд має наш вивід.

Параметри функції pprint()

Настав час розібратися з параметрами функцї pprint(), кожен з яких має свої особливості і своє призначення.

Параметр sort_dicts

Давайте ще раз поглянемо на результат останнього прикладу, коли ми збільшили вміст словника:

{'Additional': ['Hardware Programming',
                'Operating Systems',
                'Quantium Computing',
                'Data Science',
                'Embedded Systems'],
 'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
 'Specific': ['Electrotechnics',
              'Robotics',
              'Theory of probability',
              'Computer Science',
              'Machine Learning']}

Після отримання результату можна зробити цікаве спостереження — ключ Additional та його значення у вигляді списку виводиться на початку. Це відбувається через параметр функції pprint(), який за замовчуванням сортує ключі словника у алфавітному порядку.

Цим параметром є sort_dicts, за замовчуванням його значення True, а тому функція pprint() автоматично сортує ключі словника у алфавітному порядку.

Тепер змінимо значення цього параметру, задавши sort_dicts=False:

import pprint

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
                         "Machine Learning"],
            "Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
                           "Embedded Systems"]}
pprint.pprint(sciences, sort_dicts=False)
{'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
 'Specific': ['Electrotechnics',
              'Robotics',
              'Theory of probability',
              'Computer Science',
              'Machine Learning'],
 'Additional': ['Hardware Programming',
                'Operating Systems',
                'Quantium Computing',
                'Data Science',
                'Embedded Systems']}

Ось тепер сортування немає і ми бачимо ключі у такому порядку, в якому ми їх створювали.

Параметр stream

Цей параметр приймає змінну з файлом, у який ми хочемо зберегти наш вивід.

Ось приклад, спочатку створюємо файл, у який все і буде зберігатися:

text_file = open("save.txt", "w")

Позначка “w“ означає, що ми відкриваємо файл з наміром записати туди дані. А взагалі-то, фунція open() відкриває файли, але якщо такого файла ще немає, то вона створить його.

Далі передаємо змінну text_file у параметр stream:

pprint.pprint(sciences, stream=text_file)

Закриваємо файл (це важливо):

text_file.close()

Ось код, який у нас вийшов:

import pprint

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
                         "Machine Learning"],
            "Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
                           "Embedded Systems"]}

text_file = open("save.txt", "w")
pprint.pprint(sciences, stream=text_file)

text_file.close()

У результаті ми нічого не побачимо у консолі, але будемо мати файл save.txt, де буде збережений вивід словника:

Дані збереглися у файл

Параметр indent

Цей параметр дозволяє задати кількість відступів у при виведенні. Це відступ буде проявлятися у кожній нашій вкладці, тобто у кожному ключі словника.

Ось як це виглядяє:

import pprint

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
                         "Machine Learning"],
            "Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
                           "Embedded Systems"]}

pprint.pprint(sciences, indent=10)
{         'Additional': [         'Hardware Programming',
                                  'Operating Systems',
                                  'Quantium Computing',
                                  'Data Science',
                                  'Embedded Systems'],
          'Basic': [         'Chemistry',
                             'Physics',
                             'Mathematics',
                             'Biology',
                             'Philosophy'],
          'Specific': [         'Electrotechnics',
                                'Robotics',
                                'Theory of probability',
                                'Computer Science',
                                'Machine Learning']}

Параметр width

Даний параметр дозволяє встановити максимальну кількість символів на кожен рядок. Але, якщо якийсь рядок перевищує зазначену кількість символів і його ніяк не можна розбити на різні рядки, то програма просто залишить цей рядок як є.

Ось приклад роботи цього параметра:

import pprint

sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
            "Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
                         "Machine Learning"],
            "Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
                           "Embedded Systems"]}

pprint.pprint(sciences, width=10)
{'Additional': ['Hardware '
                'Programming',
                'Operating '
                'Systems',
                'Quantium '
                'Computing',
                'Data '
                'Science',
                'Embedded '
                'Systems'],
 'Basic': ['Chemistry',
           'Physics',
           'Mathematics',
           'Biology',
           'Philosophy'],
 'Specific': ['Electrotechnics',
              'Robotics',
              'Theory '
              'of '
              'probability',
              'Computer '
              'Science',
              'Machine '
              'Learning']}

Деякі рядки були розбиті на декілька, наприклад, Theory of probability, а такі як Electrotechnics просто залишися як і були.

Параметр depth

Цей параметр визначає, скільки вкладок з нашими даними можна вивести у консоль. Якщо ж структура наших даних занадто глибока для того, щоб вивести її саме з таким числом вкладень, то наступні рівні вкладень будуть позначатися трьома крапками.

Перед робою з цим параметром пропоную видозмінити наш словник, що він краще відображав сенс параметра:

sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
                      {"Physics": [11, 9, 10]},
                      {"Mathematics": [11, 12, 12]},
                      {"Biology": [9, 9, 8]},
                      {"Philosophy": [10, 11, 12]}],
            "Specific": [{"Electrotechnics": [9, 12, 12]},
                         {"Robotics": [10, 10, 10]},
                         {"Theory of probability": [9, 10, 10]},
                         {"Computer Science": [11, 11, 12]},
                         {"Machine Learning": [8, 9, 9]}],
            "Additional": [{"Hardware Programming": [9, 9, 9]},
                           {"Operating Systems": [10, 12, 12]},
                           {"Quantium Computing": [8, 8, 8]},
                           {"Data Science": [10, 11, 12]},
                           {"Embedded Systems": [9, 9, 10]}]}

Тепер він буде виглядати так, припустимо, що ми додали оцінки з кожного предмету. Таким чином ми зробили наш словник глибшим за структурою.

Далі встановлюємо значення параметра depth і запускаємо код:

import pprint

sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
                      {"Physics": [11, 9, 10]},
                      {"Mathematics": [11, 12, 12]},
                      {"Biology": [9, 9, 8]},
                      {"Philosophy": [10, 11, 12]}],
            "Specific": [{"Electrotechnics": [9, 12, 12]},
                         {"Robotics": [10, 10, 10]},
                         {"Theory of probability": [9, 10, 10]},
                         {"Computer Science": [11, 11, 12]},
                         {"Machine Learning": [8, 9, 9]}],
            "Additional": [{"Hardware Programming": [9, 9, 9]},
                           {"Operating Systems": [10, 12, 12]},
                           {"Quantium Computing": [8, 8, 8]},
                           {"Data Science": [10, 11, 12]},
                           {"Embedded Systems": [9, 9, 10]}]}

pprint.pprint(sciences, depth=4)
{'Additional': [{'Hardware Programming': [9, 9, 9]},
                {'Operating Systems': [10, 12, 12]},
                {'Quantium Computing': [8, 8, 8]},
                {'Data Science': [10, 11, 12]},
                {'Embedded Systems': [9, 9, 10]}],
 'Basic': [{'Chemistry': [10, 10, 12]},
           {'Physics': [11, 9, 10]},
           {'Mathematics': [11, 12, 12]},
           {'Biology': [9, 9, 8]},
           {'Philosophy': [10, 11, 12]}],
 'Specific': [{'Electrotechnics': [9, 12, 12]},
              {'Robotics': [10, 10, 10]},
              {'Theory of probability': [9, 10, 10]},
              {'Computer Science': [11, 11, 12]},
              {'Machine Learning': [8, 9, 9]}]}

Як бачимо, словник відобразився повністю, але тепер змінимо значення depth на 3:

{'Additional': [{'Hardware Programming': [...]},
                {'Operating Systems': [...]},
                {'Quantium Computing': [...]},
                {'Data Science': [...]},
                {'Embedded Systems': [...]}],
 'Basic': [{'Chemistry': [...]},
           {'Physics': [...]},
           {'Mathematics': [...]},
           {'Biology': [...]},
           {'Philosophy': [...]}],
 'Specific': [{'Electrotechnics': [...]},
              {'Robotics': [...]},
              {'Theory of probability': [...]},
              {'Computer Science': [...]},
              {'Machine Learning': [...]}]}

Ось тут бачимо зміни. Наш словник відображається не повністю, бо значення останніх ключів не відображаються. Саме про це я казав на початку знайомства з даним параметром. Якщо він не може вивести структуру всю структуру з тим значенням, яке було йому передано, то він просто відображає настпуну вкладку трьома вкладками.

Наш словник згорнеться ще більше, якщо ми вкажемо depth=2:

sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
                      {"Physics": [11, 9, 10]},
                      {"Mathematics": [11, 12, 12]},
                      {"Biology": [9, 9, 8]},
                      {"Philosophy": [10, 11, 12]}],
            "Specific": [{"Electrotechnics": [9, 12, 12]},
                         {"Robotics": [10, 10, 10]},
                         {"Theory of probability": [9, 10, 10]},
                         {"Computer Science": [11, 11, 12]},
                         {"Machine Learning": [8, 9, 9]}],
            "Additional": [{"Hardware Programming": [9, 9, 9]},
                           {"Operating Systems": [10, 12, 12]},
                           {"Quantium Computing": [8, 8, 8]},
                           {"Data Science": [10, 11, 12]},
                           {"Embedded Systems": [9, 9, 10]}]}

pprint.pprint(sciences, depth=2)
{'Additional': [{...}, {...}, {...}, {...}, {...}],
 'Basic': [{...}, {...}, {...}, {...}, {...}],
 'Specific': [{...}, {...}, {...}, {...}, {...}]}

Якщо ж поставимо depth=1, то структуру слокника взагалі не буде видно:

import pprint

sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
                      {"Physics": [11, 9, 10]},
                      {"Mathematics": [11, 12, 12]},
                      {"Biology": [9, 9, 8]},
                      {"Philosophy": [10, 11, 12]}],
            "Specific": [{"Electrotechnics": [9, 12, 12]},
                         {"Robotics": [10, 10, 10]},
                         {"Theory of probability": [9, 10, 10]},
                         {"Computer Science": [11, 11, 12]},
                         {"Machine Learning": [8, 9, 9]}],
            "Additional": [{"Hardware Programming": [9, 9, 9]},
                           {"Operating Systems": [10, 12, 12]},
                           {"Quantium Computing": [8, 8, 8]},
                           {"Data Science": [10, 11, 12]},
                           {"Embedded Systems": [9, 9, 10]}]}

pprint.pprint(sciences, depth=1)
{'Additional': [...], 'Basic': [...], 'Specific': [...]}

Параметр compact

Цей метод намагається компактно відобразити довгі колонки з рядками, якщо йому задано значення True. Якщо ж задано значення False, то він ніяк не змінює відображення переданої структури.

Коли compact=True:

import pprint

sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
                      {"Physics": [11, 9, 10]},
                      {"Mathematics": [11, 12, 12]},
                      {"Biology": [9, 9, 8]},
                      {"Philosophy": [10, 11, 12]}],
            "Specific": [{"Electrotechnics": [9, 12, 12]},
                         {"Robotics": [10, 10, 10]},
                         {"Theory of probability": [9, 10, 10]},
                         {"Computer Science": [11, 11, 12]},
                         {"Machine Learning": [8, 9, 9]}],
            "Additional": [{"Hardware Programming": [9, 9, 9]},
                           {"Operating Systems": [10, 12, 12]},
                           {"Quantium Computing": [8, 8, 8]},
                           {"Data Science": [10, 11, 12]},
                           {"Embedded Systems": [9, 9, 10]}]}

pprint.pprint(sciences, compact=True)
{'Additional': [{'Hardware Programming': [9, 9, 9]},
                {'Operating Systems': [10, 12, 12]},
                {'Quantium Computing': [8, 8, 8]},
                {'Data Science': [10, 11, 12]},
                {'Embedded Systems': [9, 9, 10]}],
 'Basic': [{'Chemistry': [10, 10, 12]}, {'Physics': [11, 9, 10]},
           {'Mathematics': [11, 12, 12]}, {'Biology': [9, 9, 8]},
           {'Philosophy': [10, 11, 12]}],
 'Specific': [{'Electrotechnics': [9, 12, 12]}, {'Robotics': [10, 10, 10]},
              {'Theory of probability': [9, 10, 10]},
              {'Computer Science': [11, 11, 12]},
              {'Machine Learning': [8, 9, 9]}]}

Коли compact=False:

import pprint

sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
                      {"Physics": [11, 9, 10]},
                      {"Mathematics": [11, 12, 12]},
                      {"Biology": [9, 9, 8]},
                      {"Philosophy": [10, 11, 12]}],
            "Specific": [{"Electrotechnics": [9, 12, 12]},
                         {"Robotics": [10, 10, 10]},
                         {"Theory of probability": [9, 10, 10]},
                         {"Computer Science": [11, 11, 12]},
                         {"Machine Learning": [8, 9, 9]}],
            "Additional": [{"Hardware Programming": [9, 9, 9]},
                           {"Operating Systems": [10, 12, 12]},
                           {"Quantium Computing": [8, 8, 8]},
                           {"Data Science": [10, 11, 12]},
                           {"Embedded Systems": [9, 9, 10]}]}

pprint.pprint(sciences, compact=False)
{'Additional': [{'Hardware Programming': [9, 9, 9]},
                {'Operating Systems': [10, 12, 12]},
                {'Quantium Computing': [8, 8, 8]},
                {'Data Science': [10, 11, 12]},
                {'Embedded Systems': [9, 9, 10]}],
 'Basic': [{'Chemistry': [10, 10, 12]},
           {'Physics': [11, 9, 10]},
           {'Mathematics': [11, 12, 12]},
           {'Biology': [9, 9, 8]},
           {'Philosophy': [10, 11, 12]}],
 'Specific': [{'Electrotechnics': [9, 12, 12]},
              {'Robotics': [10, 10, 10]},
              {'Theory of probability': [9, 10, 10]},
              {'Computer Science': [11, 11, 12]},
              {'Machine Learning': [8, 9, 9]}]}

Параметр underscore_numbers

Цей параметр розділяє цілі числа у структурі на тисячі за допомогою нижнього підкреслення “_“, якщо задано значення True. Якщо ж параметру було передано значення False, то все залишається як і було. Також перед щодо цього параметра слід зазначити, що він з’явився у версії 3.10, тому у старіших версіях його немає.

Створимо для відображення роботи цього параметра новий словник і вкажемо параметру underscore_numbers значення True:

import pprint

tech_prices = {"Laptop": 30000,
               "Smartphone": 250000,
               "Headphones": 10000}

pprint.pprint(tech_prices, underscore_numbers=True)
{'Headphones': 10_000, 'Laptop': 30_000, 'Smartphone': 250_000}

Тепер передамо значення False:

{'Headphones': 10000, 'Laptop': 30000, 'Smartphone': 250000}

Висновок

У цій статті ми детально розібрали як гарно та зручно виводити дані у консоль за допомогою бібліотеки pprint. У рамках цієї статті ми дослідили функцію pprint() та її параметри. Всім дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader we.ua/nocturnal_reader

Нічний читач

52Довгочити
581Прочитання
16Підписники
Підтримати
На Друкарні з 14 липня

Більше від автора

  • Створюємо стовпчикові графіки за допомогою plotly

    Всіх вітаю! У цій статті пропоную вам зануритися у графіки та візуалізацію на Python за допомогою plotly. На цей раз ми втілимо графік прослуховувань різних реп виконавців за місяць та графік з оцінками деяких альбомів за сайтом AOTY.

    Теми цього довгочиту:

    Програмування
  • Методи lower(), upper(), islower() та isupper() у Python

    Всіх вітаю! У цій невеличкій статті ми познайомимося із одразу чотирма методами для зміни регістру рядків у Python. Конкретно сьогодні ми ознайомимося із методами lower(), upper(), islower() та isupper().

    Теми цього довгочиту:

    Програмування
  • Методи startswith() та endswith() у Python

    Всіх вітаю! У цій статті ми розглянемо методи startwith() та endwith() у Python. Також наведемо приклади використання цих функцій безпосередньо у коді.

    Теми цього довгочиту:

    Програмування

Це також може зацікавити:

  • λanguage: Неформальний опис мови

    Автор пояснює, як написати парсер, інтерпретатор, компілятор, та інші складові власної мови програмування. Описується синтаксис мови, особливості реалізації функцій, умовних конструкцій та інших елементів мови.

    Теми цього довгочиту:

    Js

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • λanguage: Неформальний опис мови

    Автор пояснює, як написати парсер, інтерпретатор, компілятор, та інші складові власної мови програмування. Описується синтаксис мови, особливості реалізації функцій, умовних конструкцій та інших елементів мови.

    Теми цього довгочиту:

    Js