Pular para o conteúdo

Como usar o pprint para formatar impressões?

[

Embelezando suas estruturas de dados com Pretty Print em Python

por Ian Currie
Nível intermediário

Dealing with data is essential for any Pythonista, but sometimes that data is just not very pretty. Computers don’t care about formatting, but without good formatting, humans may find something hard to read. The output isn’t pretty when you use print() on large dictionaries or long lists—it’s efficient, but not pretty.

The pprint module in Python is a utility module that you can use to print data structures in a readable, pretty way. It’s a part of the standard library that’s especially useful for debugging code dealing with API requests, large JSON files, and data in general.

Ao final deste tutorial, você:

  • Entenderá por que o módulo pprint é necessário
  • Aprenderá a usar pprint(), PrettyPrinter, e seus parâmetros
  • Será capaz de criar sua própria instância de PrettyPrinter
  • Salvará a saída de string formatada em vez de imprimi-la
  • Imprimirá e reconhecerá estruturas de dados recursivas

Ao longo do caminho, você também verá uma solicitação HTTP para uma API pública e a análise de JSON em ação.

Bônus gratuito: Clique aqui para obter um Python Cheat Sheet e aprender os conceitos básicos do Python 3, como trabalhar com tipos de dados, dicionários, listas e funções do Python.

Entendendo a Necessidade do Pretty Print em Python

Antes de começar a explorar o pprint, você primeiro usará o urllib para fazer uma solicitação e obter alguns dados. Você fará uma solicitação para {JSON} Placeholder para obter algumas informações de usuário fictício. O primeiro passo é fazer a solicitação HTTP GET e colocar a resposta em um dicionário:

Python

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

Aqui, você faz uma solicitação básica GET e, em seguida, analisa a resposta em um dicionário com json.loads(). Com o dicionário agora em uma variável, o próximo passo comum é imprimir o conteúdo com print():

Python

print(users)

A saída desse código não é muito legível, especialmente quando se trata de estruturas de dados complexas como um dicionário aninhado. É aqui que o módulo pprint entra em ação.

Trabalhando com pprint

O módulo pprint fornece a função pprint() para imprimir estruturas de dados de forma mais legível para humanos. Ao contrário da função print(), que não adiciona quebras de linha entre os elementos, o pprint() formata a saída de maneira organizada e fácil de ler.

Vamos atualizar o código anterior para usar pprint():

Python

from pprint import pprint
pprint(users)

Agora, a saída será formatada e organizada de uma maneira muito mais legível.

Explorando os Parâmetros Opcionais do pprint()

O pprint() também oferece uma variedade de parâmetros opcionais que você pode usar para personalizar a saída da impressão. Vamos dar uma olhada em alguns desses parâmetros:

Resumindo seus dados: depth

O parâmetro depth define a profundidade máxima da recursão durante a impressão. Isso é útil para evitar imprimir estruturas de dados com muitos níveis aninhados e reduzir a quantidade de texto na saída.

Python

pprint(users, depth=1)

A saída agora será resumida, mostrando apenas o primeiro nível de aninhamento dos dados.

Dando espaço aos seus dados: indent

O parâmetro indent define o número de espaços em branco usados para indentar cada nível da estrutura de dados. Isso ajuda a melhorar a legibilidade e a organização da saída impressa.

Python

pprint(users, indent=4)

Agora, a saída será indentada com 4 espaços em branco a cada nível da estrutura de dados.

Limitando os comprimentos das linhas: width

O parâmetro width define o número máximo de caracteres por linha na saída impressa. Isso é útil quando você está trabalhando com dados muito longos e deseja evitar que a saída se estenda além de um determinado limite.

Python

pprint(users, width=80)

Agora, a saída será limitada a no máximo 80 caracteres por linha.

Comprimindo suas sequências longas: compact

O parâmetro compact controla se sequências longas, como listas e tuplas, são compactadas para caber em uma linha ou se são apresentadas em múltiplas linhas. Essa opção é útil para conservar espaço em uma saída com muitos elementos.

Python

pprint(users, compact=True)

Agora, as sequências longas serão compactadas em uma linha, economizando espaço na saída impressa.

Direcionando sua saída: stream

O parâmetro stream permite especificar o objeto de saída onde a impressão será direcionada. Por padrão, a saída é direcionada para a saída padrão do console, mas você pode redirecioná-la para um arquivo ou qualquer objeto com um método write().

Python

with open("output.txt", "w") as f:
pprint(users, stream=f)

Agora, a saída será gravada no arquivo “output.txt” em vez de ser impressa no console.

Evitando a ordenação de dicionários: sort_dicts

O parâmetro sort_dicts controla se os dicionários serão ordenados alfabeticamente durante a impressão. Por padrão, os dicionários são ordenados para facilitar a leitura, mas se você deseja manter a ordem original das chaves, defina esse parâmetro como False.

Python

pprint(users, sort_dicts=False)

Agora, a saída não será ordenada alfabeticamente pelos nomes das chaves dos dicionários.

Embelezando seus números: underscore_numbers

O parâmetro underscore_numbers controla se números grandes são impressos com underscores para melhorar a legibilidade. Por padrão, esse parâmetro é definido como False, mas se você deseja habilitar essa opção, defina-o como True.

Python

pprint(users, underscore_numbers=True)

Agora, números grandes serão impressos com underscores para separar os grupos de dígitos e melhorar a leitura.

Criando um Objeto PrettyPrinter Personalizado

Além de usar a função pprint(), você também pode criar sua própria instância da classe PrettyPrinter para ter mais controle sobre a formatação da saída. Você pode personalizar os parâmetros opcionais e usar os métodos dessa classe para imprimir e formatar suas estruturas de dados.

Python

from pprint import PrettyPrinter
my_printer = PrettyPrinter(indent=2, depth=3, width=80)
my_printer.pprint(users)

Aqui, você cria uma instância de PrettyPrinter com os parâmetros personalizados de indentação, profundidade e largura. Em seguida, você usa o método pprint() dessa instância para imprimir a saída formatada.

Obtendo uma String Formatada com pformat()

Além de imprimir diretamente a saída formatada, o módulo pprint também fornece a função pformat() que retorna a string formatada em vez de imprimi-la. Isso é útil quando você deseja salvar ou manipular a saída de alguma outra maneira.

Python

from pprint import pformat
formatted_string = pformat(users)
print(formatted_string)

Aqui, você usa pformat() para obter a string formatada e salvá-la em uma variável. Em seguida, você pode usar essa string conforme necessário, como imprimi-la ou gravá-la em um arquivo.

Lidando com Estruturas de Dados Recursivas

O módulo pprint lida muito bem com estruturas de dados recursivas, como listas e dicionários aninhados. Ele é capaz de imprimir essas estruturas sem entrar em um loop infinito devido às referências cruzadas.

Por exemplo, vamos criar uma lista que contém uma referência cruzada com ela mesma:

Python

my_list = []
my_list.append(my_list)
pprint(my_list)

Mesmo com essa referência cruzada, o pprint é capaz de imprimir a lista de maneira legível sem entrar em um loop infinito.

Conclusão

O módulo pprint do Python é uma ferramenta poderosa para imprimir estruturas de dados de forma legível e organizada. Ele é útil para depurar código, inspecionar e explorar dados e melhorar a legibilidade da saída.

Neste tutorial, você aprendeu como usar a função pprint(), os parâmetros opcionais oferecidos pelo pprint(), como criar sua própria instância da classe PrettyPrinter, como obter uma string formatada com pformat(), e como lidar com estruturas de dados recursivas.

Agora você está pronto para embelezar suas estruturas de dados e facilitar a leitura de suas saídas no Python!

⬅️ Voltar para o Repositório de Tutoriais de Python

Deixe seu feedback e diga-nos o que você achou deste tutorial!