¿Cómo hago para que pprint de python devuelva una cadena en lugar de imprimir?

1 minuto de lectura

avatar de usuario
Drue

En otras palabras, ¿cuál es el equivalente de sprintf a pprint?

avatar de usuario
Fantasma silencioso

los pprint módulo tiene un comando llamado formatopsólo para ese propósito.

De la documentación:

Devuelve la representación formateada del objeto como una cadena. La sangría, el ancho y la profundidad se pasarán al constructor PrettyPrinter como parámetros de formato.

Ejemplo:

>>> import pprint
>>> people = [
...     {"first": "Brian", "last": "Kernighan"}, 
...     {"first": "Dennis", "last": "Richie"},
... ]
>>> pprint.pformat(people, indent=4)
"[   {   'first': 'Brian', 'last': 'Kernighan'},\n    {   'first': 'Dennis', 'last': 'Richie'}]"

  • Gracias por el código, fue muy útil. Como nota al margen para 2021, en muchos contextos es útil agregar sort_dicts=False a los argumentos de pprint.pformat, porque esto preserva el orden original de los diccionarios. (Creo que esta opción solo es válida con las versiones más nuevas de Python).

    – C-3PO

    2 de junio de 2021 a las 13:52


  • sort_dicts fue implementado en python 3.8

    – Gruber

    4 de mayo a las 13:39


Asumiendo que realmente quieres decir pprint desde el biblioteca de letras bonitasentonces quieres el pprint.pformat método.

Si solo quieres decir printentonces quieres str()

Estás buscando pprint.pformat?

>>> import pprint
>>> pprint.pformat({'key1':'val1', 'key2':[1,2]})
"{'key1': 'val1', 'key2': [1, 2]}"
>>>

Algo como esto:

import pprint, StringIO

s = StringIO.StringIO()
pprint.pprint(some_object, s)
print s.getvalue() # displays the string 

  • técnicamente la única respuesta “correcta” considerando solo el título

    – villasv

    9 de enero de 2017 a las 17:27


  • técnicamente la única respuesta “correcta” considerando solo el título

    – villasv

    9 de enero de 2017 a las 17:27


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad