Друкарня від 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() та її параметри. Всім дякую за увагу!

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

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

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

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

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

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

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

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

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

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

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

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

Нічний читач

392Прочитань
21Автори
11Читачі
Підтримати
На Друкарні з 14 липня

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

  • Скалярний, векторний та мішаний добутки у Python

    Всіх вітаю! Предметом обговорення у сьогоднішній статті будуть скалярний, векторний та мішаний добутки у Python за допомогою бібліотеки numpy. У цій статті ми розглянемо як реалізувати усі ці добуки через відповідний функціонал та дещо дізнаємося про їх суть.

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

    Програмування
  • Обчислення статистичних показників даних про прогноз погоди у Python

    Всіх вітаю! У цьому матеріалі ми будемо візуалізувати значення максимальних та мінімальних прогнозованих значень температури на січень через бібліотеку plotly. Крім того, ми проведемо аналіз статистичних показників цих даних за допомогою вбудованого модуля statistics.

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

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

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

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

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

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