Пропустить до содержимого

Как использовать модуль pprint для эффективного форматирования вывода в Python

[

Красивая печать данных в Python

Изучение модуля pprint


При работе с данными в Python важно, чтобы они выглядели красиво. Компьютеру может быть все равно на форматирование, но людям может быть трудно читать данные без хорошего форматирования. Когда вы используете функцию print() для больших словарей или длинных списков, вывод выглядит эффективно, но не очень красиво.

Модуль pprint в Python - это вспомогательный модуль, который можно использовать для вывода структур данных в красивом и читаемом виде. Этот модуль является частью стандартной библиотеки и особенно полезен при отладке кода, работающего с запросами API, большими файлами JSON и данными в целом.

По окончании этого руководства вы:

  • Поймете, почему модуль pprint необходим
  • Узнаете, как использовать функции pprint() и PrettyPrinter и их параметры
  • Сможете создавать собственные экземпляры PrettyPrinter
  • Сохраните форматированный вывод строк вместо его простого вывода
  • Будете работать с рекурсивными структурами данных

Понимание необходимости модуля pprint в Python

Прежде чем начать изучение pprint, вам следует использовать модуль urllib для выполнения запроса и получения данных. Вы сделаете запрос к сайту {JSON} Placeholder для получения некоторой тестовой информации о пользователях. Сначала сделайте GET-запрос по HTTP и сохраните ответ в словаре:

from urllib import request
response = request.urlopen("https://jsonplaceholder.typicode.com/users")
json_response = response.read()
import json
users = json.loads(json_response)

Здесь вы делаете базовый запрос GET и затем разбираете ответ в словаре с помощью функции json.loads(). Теперь, когда у вас есть словарь, обычным следующим шагом является вывод содержимого с помощью print():

print(users)

Работа с модулем pprint

Модуль pprint предоставляет функции pprint() и PrettyPrinter, которые позволяют выводить данные в удобном для чтения формате. Рассмотрим, как использовать эти функции и экспериментируем с их параметрами.

Разбор выборочных параметров pprint()

pprint() имеет несколько необязательных параметров, которые позволяют настроить способ вывода данных. Рассмотрим некоторые из этих параметров:

  • depth: этот параметр определяет максимальную глубину вложенности при выводе структуры данных. По умолчанию значение равно None, что означает полную распечатку данных.
  • indent: этот параметр определяет количество пробелов в отступе для каждого уровня вложенности. По умолчанию значение равно 1.
  • width: этот параметр определяет максимальное количество символов в строке вывода. По умолчанию значение равно 80.
  • compact: этот параметр определяет, следует ли печатать длинные строки без переносов. Если значение True, то строки будут без переносов. По умолчанию значение равно False.
  • stream: этот параметр позволяет указать поток, в который будет направлен вывод. По умолчанию вывод направляется на стандартный поток вывода.
  • sort_dicts: этот параметр определяет, следует ли сортировать словари по алфавиту перед выводом. Если значение True, то словари будут отсортированы перед печатью. По умолчанию значение равно False.
  • underscore_numbers: этот параметр позволяет указать, следует ли выводить числа с использованием подчеркивания для большей читабельности. Если значение True, то числа будут выводиться с подчеркиваниями. По умолчанию значение равно False.

Пример работы с функцией pprint()

from pprint import pprint
data = {
"name": "John Smith",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"friends": [
"Alice",
"Bob",
"Charlie"
]
}
pprint(data, indent=4, width=30, sort_dicts=True)

В этом примере мы используем pprint() для вывода словаря data в удобочитаемом формате. Мы также устанавливаем параметры indent равным 4, width равным 30 и sort_dicts равным True.


Создание собственного объекта PrettyPrinter

Вы также можете создать свой собственный экземпляр класса PrettyPrinter, что позволит вам настроить вывод данных по своему усмотрению. Рассмотрим пример:

from pprint import PrettyPrinter
class MyPrettyPrinter(PrettyPrinter):
def format(self, object, context, maxlevels, level):
if isinstance(object, tuple):
# Форматируем кортежи в виде строки
return f"({', '.join(object)})"
return PrettyPrinter.format(self, object, context, maxlevels, level)
data = ("apple", "banana", "cherry")
pp = MyPrettyPrinter(indent=4, width=30)
pp.pprint(data)

В этом примере мы создаем свой класс MyPrettyPrinter, который наследуется от PrettyPrinter. В этом классе мы переопределяем метод format() для форматирования кортежей в виде строки. Затем мы создаем экземпляр MyPrettyPrinter с параметрами indent равным 4 и width равным 30, и используем его для вывода данных.


Получение отформатированной строки с помощью функции pformat()

Модуль pprint также предоставляет функцию pformat(), которая возвращает отформатированную строку вместо простого вывода. Рассмотрим пример:

from pprint import pformat
data = {
"name": "John Smith",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"friends": [
"Alice",
"Bob",
"Charlie"
]
}
formatted_str = pformat(data, indent=4, width=30, sort_dicts=True)
print(formatted_str)

В этом примере мы используем pformat() для получения отформатированной строки словаря data. Мы также устанавливаем параметры indent равным 4, width равным 30 и sort_dicts равным True. Затем мы выводим отформатированную строку на печать.


Работа с рекурсивными структурами данных

Модуль pprint также может помочь при работе с рекурсивными структурами данных, такими как вложенные словари или списки. При выводе рекурсивной структуры данных pprint автоматически добавляет отступы для каждого уровня вложенности, что облегчает чтение и понимание данных.

from pprint import pprint
data = {
"name": "John Smith",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY",
"neighbors": {
"Alice": {
"age": 28,
"address": {
"street": "456 Park Ave",
"city": "New York",
"state": "NY"
}
},
"Bob": {
"age": 35,
"address": {
"street": "789 Elm St",
"city": "New York",
"state": "NY"
}
}
}
}
}
pprint(data, indent=4)

В этом примере мы имеем вложенные словари внутри другого словаря. При использовании pprint() с параметром индентации равным 4, мы видим, что каждый уровень вложенности имеет свой отступ, что облегчает чтение данных.


Заключение

В этом руководстве вы узнали о модуле pprint в Python и его возможностях для красивой печати данных. Вы научились использовать функции pprint() и PrettyPrinter и настраивать их параметры. Также вы получили представление о том, как можно создать свой собственный объект PrettyPrinter и использовать функцию pformat() для получения отформатированной строки данных. И, наконец, вы узнали, как pprint помогает работать с рекурсивными структурами данных.

Теперь вы можете применять модуль pprint в ваших проектах Python, чтобы выводить данные в красивом и читаемом формате!