Como usar o Python Pretty Printer?
Prettificar suas estruturas de dados com Pretty Print no Python
por Ian Currie 3 comentários intermediário python
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.
O módulo pprint
no Python é um utilitário que você pode usar para imprimir estruturas de dados de maneira legível e bonita. É parte da biblioteca padrão e é especialmente útil para depurar código que lida com requisições de API, arquivos JSON grandes e dados em geral.
Ao final deste tutorial, você vai:
- 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 do
PrettyPrinter
- Salvar a saída de uma string formatada em vez de imprimi-la
- Imprimir e reconhecer estruturas de dados recursivas
Bônus grátis: Clique aqui para acessar um Python Cheat Sheet e aprender o básico do Python 3, como trabalhar com tipos de dados, dicionários, listas e funções Python.
Entendendo a necessidade do Pretty Print no Python
Antes de começar a explorar o pprint
, você vai usar o urllib
para fazer uma requisição e obter alguns dados. Você fará uma requisição para o {JSON} Placeholder para obter algumas informações falsas de usuários. Primeiro, faça uma requisição HTTP GET
e coloque a resposta em um dicionário:
Python
Aqui, você faz uma requisição básica GET
e em seguida faz o parsing da resposta em um dicionário usando json.loads()
. Com o dicionário agora em uma variável, o próximo passo comum é imprimir o conteúdo usando print()
:
Python
O resultado será um dicionário longo e não formatado que pode ser difícil de ler. É aí que entra o pprint
. Ele permite formatar a saída do seu dicionário de uma maneira mais agradável aos olhos:
Python
Ao usar o pprint
para imprimir o dicionário, você obtém uma saída muito mais legível, com a indentação correta e quebras de linha adequadas. Isso torna a leitura e a compreensão dos dados muito mais fáceis.
Mas o pprint
não se limita apenas a dicionários. Ele pode ser usado para estruturas de dados complexas, como listas aninhadas, tuplas e até mesmo objetos personalizados. Ele é capaz de lidar com praticamente qualquer estrutura de dados que você possa ter.
Trabalhando com pprint
Agora que você tem uma ideia básica de como o pprint
pode ajudar a melhorar a formatação dos seus dados, vamos dar uma olhada mais de perto nas funções principais que ele oferece: pprint()
e PrettyPrinter()
.
Utilizando pprint()
A função pprint()
é a maneira mais simples de usar o pprint
. Ela aceita qualquer estrutura de dados e imprime-a formatada:
Python
A saída será uma versão formatada dos dados, como esta:
Explorando os parâmetros opcionais do pprint()
O pprint
também possui vários parâmetros opcionais que você pode usar para personalizar a saída formatada. Alguns dos parâmetros mais úteis incluem:
Resumindo seus dados: depth
O parâmetro depth
controla a profundidade máxima de recursão nos seus dados. Por padrão, depth=None
, o que significa que ele irá imprimir a estrutura completa dos seus dados, independentemente de quão aninhados eles estejam. No entanto, você pode definir um valor inteiro para limitar a profundidade de impressão.
Python
A saída será limitada apenas ao primeiro nível de aninhamento dos dados:
Dando espaço aos seus dados: indent
O parâmetro indent
controla o número de espaços utilizados para a indentação da saída. O valor padrão é 1, mas você pode ajustá-lo para a quantidade desejada.
Python
A saída terá uma maior indentação:
Limitando o comprimento das linhas: width
O parâmetro width
define o número máximo de caracteres permitidos por linha ao imprimir a saída. Se um dicionário ou lista for muito longo para caber em uma única linha dentro do limite de comprimento, ele será quebrado em várias linhas.
Python
A saída será:
A lista de hobbies foi quebrada em várias linhas, para que não ultrapassasse o limite de 30 caracteres por linha.
Squeezing suas sequências longas: compact
Quando você tem sequências longas, como listas ou tuplas com muitos elementos, o pprint
pode compactá-las e exibir apenas alguns elementos no meio, usando reticências para indicar que há mais elementos. O parâmetro compact
controla a exibição dessa compressão das sequências longas.
Python
A saída será:
A sequência foi compactada para mostrar apenas os primeiros 5 elementos e o último elemento.
Direcionando sua saída: stream
Por padrão, o pprint
imprime a saída no console, mas você pode direcionar a saída para qualquer objeto de fluxo com o parâmetro stream
. Isso permite salvar a saída formatada em um arquivo, por exemplo.
Python
Neste exemplo, a saída formatada será salva no arquivo output.txt
.
Evitando a ordenação de dicionários: sort_dicts
Por padrão, o pprint
ordena dicionários alfabeticamente pela chave antes de imprimi-los. Para manter a ordem original dos dicionários, você pode definir o parâmetro sort_dicts
como False
.
Python
A saída manterá a ordem original dos dicionários:
Deixando seus números bonitos: underscore_numbers
O parâmetro underscore_numbers
recebe um valor booleano. Quando definido como True
, ele adiciona um sublinhado (_) entre os dígitos de números inteiros, tornando-os mais legíveis.
Python
A saída será:
Os números foram formatados com sublinhados para melhorar a legibilidade.
Criando um objeto PrettyPrinter personalizado
Além de utilizar a função pprint()
, você também pode criar um objeto PrettyPrinter
personalizado para ter ainda mais controle sobre a formatação dos seus dados. O PrettyPrinter
permite ajustar os mesmos parâmetros mencionados anteriormente, mas de uma maneira mais flexível.
Python
Neste exemplo, você cria um objeto PrettyPrinter
personalizado com indentação de 4 espaços, profundidade de 2 níveis, e compactação habilitada. Em seguida, você usa o método pprint()
para imprimir a saída formatada.
Obtendo uma string formatada com pformat()
Além de imprimir a saída formatada diretamente no console ou em um arquivo, o pprint
também permite que você obtenha a saída como uma string formatada usando o método pformat()
.
Python
Neste exemplo, você obtém a saída formatada do pprint
e a atribui à variável formatted_data
. Depois, você imprime essa variável para exibir a string formatada.
Lidando com estruturas de dados recursivas
O pprint
é capaz de lidar sem problemas com estruturas de dados recursivas, como listas aninhadas ou dicionários que contêm dicionários. Ele identifica automaticamente estruturas de dados recursivas e as trata com a formatação adequada.
Python
A saída será formatada corretamente, com a indentação e quebras de linha corretas para exibir a estrutura aninhada:
Conclusão
O módulo pprint
no Python é uma ferramenta poderosa para melhorar a legibilidade da saída de estruturas de dados. Ele nos fornece maneiras de formatar e imprimir nossos dados de forma bonita e legível. Além disso, ele também oferece opções para personalizar a saída e lidar com estruturas de dados complexas, como listas aninhadas e dicionários.
Ao utilizar o pprint
, você poderá visualizar seus dados de forma mais clara, depurar seu código com mais facilidade e melhorar a experiência de visualização dos usuários para quem você compartilha suas informações.
Agora que você entende como usar o pprint
, experimente aplicá-lo nas suas próprias estruturas de dados para obter uma saída mais bonita e legível.