[英]How to pretty print dictionaries in iPython
我目前正在使用RethinkDB,它有一个很好的Web UI和一个Data Explorer,允许用户打印出数据库的内容,如下所示:
请注意,每个键值对都从一个新行开始,键和值(大多数)具有不同的颜色。 相比之下,如果我使用iPython打印出相同的内容,我会得到一个几乎难以辨认的结果:
如果我迭代光标并print
每个项目,这会略微改善,如下所示:
但是,这需要更多的打字,但仍然不如RethinkDB Web UI。 是否可以安装一个iPython插件来改善打印输出的外观?
(我看了一下pprint ,但这似乎只能控制文本的位置,而不是它的颜色)。
你可以使用json.dumps()
:
import json
for row in r.db(....).run(conn):
print(json.dumps(row, indent=4))
虽然这不按排序顺序显示键,但在示例中似乎是这样,但它可能足以满足您的需要。 正如@coder所指出的那样, json.dumps()
可以通过指定sort_keys=True
参数对键进行排序。
for row in r.db(....).run(conn):
print(json.dumps(row, indent=4, sort_keys=True))
也可以直接打印对象(尚未测试过):
print(json.dumps(r.db(....).run(conn), indent=4, sort_keys=True)
这也可能会打印出周围的“列表”对象。
要处理不支持序列化为JSON的对象,可以使用自定义JSONEncoder
。 这是一个处理datetime.datetime
对象的示例:
from datetime import datetime
class DateTimeAwareJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
tz = obj.tzname()
return obj.ctime() + (' {}'.format(tz) if tz else '')
return super(DateTimeAwareJSONEncoder, self).default(obj)
for row in r.db(....).run(conn):
print(json.dumps(row, indent=4, sort_keys=True, cls=DateTimeAwareJSONEncoder))
您可以使用datetime.strftime()
根据需要格式化日期时间字符串。
mhawke的答案工作如果加上关键字参数time_format="raw"
来RethinkDB的run()
命令。 (否则,您会收到TypeError
因为包含时区的RethinkDB对象不是JSON可序列化的)。 结果如下:
这更容易辨认。 一个小缺点是epoch_time
比原始时间格式更难解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.