Como Usar o Python pprint Facilmente?
Embeleze suas estruturas de dados com Python Pretty Print
por Ian Currie 3 Comentários intermediário python
Compreendendo a necessidade do Python Pretty Print
Lidar com dados é essencial para qualquer Pythonista, mas às vezes esses dados não são muito bonitos. Os computadores não se importam com a formatação, mas os humanos podem ter dificuldade em ler algo sem uma boa formatação. A saída não é bonita quando você usa print()
em dicionários grandes ou listas longas - é eficiente, mas não é bonito.
O módulo pprint
do Python é um módulo de utilitário que você pode usar para imprimir estruturas de dados de uma maneira legível e bonita. É uma parte da biblioteca padrão que é especialmente útil para depurar código que lida com solicitações de API, arquivos JSON grandes e dados em geral.
Ao final deste tutorial, você irá:
- Compreender 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 string formatada em vez de imprimi-la
- Imprimir e reconhecer estruturas de dados recursivas
Bônus Gratuito: Clique aqui para obter 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.
Compreendendo a necessidade do Python Pretty Print
Antes de começar a explorar o pprint
, você primeiro usará o urllib
para fazer uma solicitação para obter alguns dados. Você fará uma solicitação para o {JSON} Placeholder para obter algumas informações fictícias de usuários. A primeira coisa a fazer é fazer a solicitação GET
HTTP e colocar a resposta em um dicionário:
Python
Aqui, você faz uma solicitação GET
básica e, em seguida, analisa a resposta em um dicionário com json.loads()
. Com o dicionário agora em uma variável, um próximo passo comum é imprimir o conteúdo com print()
:
Python
Resultado:
Você pode ver que a saída é uma única linha e não é fácil de ler. É aí que o pprint
entra em ação.
Trabalhando com pprint
O pprint
é uma ferramenta poderosa para formatar a saída de estruturas de dados em Python. Ele é usado principalmente para melhorar a legibilidade ao imprimir dicionários, listas e outras estruturas de dados complexas. Para usar o pprint
, primeiro você precisa importá-lo do módulo pprint
:
Python
A função pprint()
pode ser usada para imprimir uma estrutura de dados em um formato mais legível:
Python
Resultado:
Agora você pode ver que a saída está formatada de maneira mais legível, com cada item em uma linha separada e com as estruturas aninhadas indentadas.
O pprint()
também pode ser usado para formatar outros tipos de dados, como listas:
Python
Resultado:
Neste caso, como a estrutura de dados é simples, a saída formatada não é muito diferente da saída usando print()
, mas o pprint()
ainda fornece uma formatação mais consistente em diferentes situações.
Explorando Parâmetros Opcionais do pprint()
A função pprint()
também possui vários parâmetros opcionais que permitem personalizar a formatação da saída. Esses parâmetros permitem ajustar a quantidade de detalhes, o espaçamento, o comprimento da linha e muito mais. Vamos explorar alguns desses parâmetros.
Resumindo seus dados: depth
O parâmetro depth
controla a profundidade máxima em que o pprint()
imprime estruturas de dados aninhadas. Ela limita a profundidade que o pprint()
desce na estrutura para imprimir. O valor padrão é None
, o que significa que o pprint()
explora recursivamente a estrutura de dados.
Vamos ver isso em ação usando o seguinte exemplo:
Python
Resultado:
Aqui, definimos depth=1
, o que significa que o pprint()
só imprimirá até o primeiro nível de aninhamento. A saída mostra ...
para indicar que existe mais profundidade na estrutura que não foi impressa.
Dando espaço aos seus dados: indent
O parâmetro indent
controla a quantidade de espaçamento usado para os níveis de aninhamento. O valor padrão é 1
, que fornece uma indentação básica. Você pode aumentar esse valor para ter mais espaçamento ou diminuí-lo para ter menos espaçamento.
Vamos usar o exemplo anterior e definir indent=2
:
Python
Resultado:
Agora a saída está mais espaçada e torna as estruturas de dados aninhadas mais fáceis de serem identificadas.
Limitando o comprimento das linhas: width
O parâmetro width
controla o comprimento máximo de uma única linha de saída. O valor padrão é 80
. Se a estrutura de dados ultrapassar esse comprimento, o pprint()
dividirá a linha em várias linhas.
Vamos usar um exemplo com uma lista de números grandes e definir um width
menor:
Python
Resultado:
Aqui, definimos width=50
, o que significa que cada linha de saída terá um comprimento máximo de 50 caracteres. Quando a lista é impressa, ela é dividida em várias linhas para se ajustar ao limite de largura definido.
Comprimindo suas sequências longas: compact
O parâmetro compact
controla como o pprint()
lida com sequências longas, como listas e tuplas. O valor padrão é False
, que leva a uma saída compacta, mas difícil de ler. Quando compact
é definido como True
, o pprint()
tenta quebrar a sequência em várias linhas para uma melhor legibilidade.
Vamos ver isso em ação com o seguinte exemplo:
Python
Resultado:
Aqui, definimos compact=True
, fazendo com que cada item da lista seja impresso em uma linha separada para melhorar a legibilidade.
Direcionando sua saída: stream
O parâmetro stream
controla para onde o pprint()
direciona a saída. O valor padrão é None
, o que significa que a saída é impressa no sys.stdout
. No entanto, você pode definir um objeto de fluxo personalizado para direcionar a saída para outros locais, como arquivos.
Vamos usar um exemplo onde redirecionamos a saída para um arquivo:
Python
Neste exemplo, a saída do pprint()
é direcionada para o arquivo output.txt
em vez de ser impressa no console.
Impedindo a ordenação de dicionários: sort_dicts
O parâmetro sort_dicts
controla se os dicionários devem ser ordenados alfabeticamente pela chave ao imprimir. O valor padrão é True
, o que significa que os dicionários serão ordenados. Se você definir sort_dicts=False
, os dicionários serão impressos na ordem em que foram definidos, sem nenhuma ordenação adicional.
Vamos usar um exemplo com um dicionário e definir sort_dicts=False
:
Python
Resultado:
Aqui, definimos sort_dicts=False
, então o dicionário é impresso na ordem em que as chaves foram definidas, em vez de ser ordenado alfabeticamente.
Embelezando seus números: underscore_numbers
O parâmetro underscore_numbers
controla se os números devem ser impressos com underscores para melhor legibilidade. O valor padrão é False
. Quando underscore_numbers=True
, os números são impressos com underscores em posições estratégicas para facilitar a leitura.
Vamos usar um exemplo com números longos e definir underscore_numbers=True
:
Python
Resultado:
Aqui, definimos underscore_numbers=True
, então o número é impresso com underscores para separar as centenas, milhares, milhões, etc., para uma melhor legibilidade.
Criando um objeto PrettyPrinter personalizado
Além de usar a função pprint()
, você também pode criar seu próprio objeto PrettyPrinter
personalizado com configurações específicas de formatação. Isso é útil se você estiver trabalhando em um projeto específico que precisa consistentemente de uma determinada formatação.
Aqui está um exemplo de como criar um objeto PrettyPrinter
personalizado:
Python
Neste exemplo, criamos um objeto PrettyPrinter
chamado my_printer
com um comprimento máximo de linha de 30
e uma profundidade máxima de 2
. Em seguida, usamos o método pprint()
desse objeto para imprimir os dados com as configurações personalizadas.
Obtendo uma string bonita com pformat()
Além de imprimir diretamente o objeto em uma saída, o pprint
também oferece o método pformat()
que retorna uma string formatada que pode ser salva em uma variável para uso posterior.
Aqui está um exemplo de como obter uma string formatada com pformat()
:
Python
Resultado:
Aqui, usamos o pformat()
para obter a saída formatada em uma string chamada formatted_data
. Em seguida, imprimimos a string que contém a saída formatada.
Lidando com estruturas de dados recursivas
O pprint
também é capaz de lidar com estruturas de dados recursivas, como listas ou dicionários que se referem a si mesmos. Ele é capaz de detectar esse tipo de recursão e evitar cair em um loop infinito.
Vamos ver um exemplo de recursão com uma lista que se refere a si mesma:
Python
Resultado:
Aqui, criamos uma lista vazia e adicionamos a própria lista a ela. Quando imprimimos a lista usando pprint()
, a recursão é detectada e é mostrado [[...]]
para indicar a referência à própria lista.
Conclusão
O módulo pprint
do Python é uma ferramenta fantástica para embelezar a saída de estruturas de dados em Python. Ele fornece uma maneira fácil de imprimir e ler estruturas de dados complexas, tornando a depuração e a exploração de dados muito mais fáceis. Agora você pode usar o pprint
para tornar suas estruturas de dados mais legíveis e esteticamente agradáveis. Experimente diferentes parâmetros e veja como você pode personalizar a saída de acordo com suas necessidades.
Não hesite em explorar a documentação oficial do Python sobre o pprint
para saber mais sobre todos os recursos e opções disponíveis.
Agora você tem mais uma ferramenta em seu arsenal Python para ajudar a tornar seu código mais bonito e legível.