[英]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.