Друкарня від 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

Нічний читач

42Довгочити
479Прочитання
13Підписники
Підтримати
На Друкарні з 14 липня

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

  • Метод replace() у Python

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

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

    Програмування
  • Перетворення стилю графіків у науковий формат

    Всіх вітаю! У даній статті ми розглянемо бібліотеку SciencePlots, яка надає можливість перетворювати графіки на науковий формат. Саме у такому форматі графіки відображаються у різного роду наукових статтях і т. д.

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

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

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

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

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

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