通常、print
はユニコード文字列であっても読みやすく表示してくれます。
print(u"ほげ") # => ほげ
しかし pprint モジュールの pprint()
を使うと、なぜだかユニコード文字列がエスケープされるようになります。
pprint.pprint(u"ほげ") # => u'\u307b\u3052'
ちょっとしたデバッグ目的で PrettyPrint するときはユニコード文字列の部分もちゃんと読みたいし不便ですね。
ユニコード対応版
というわけで、
# -*- coding: utf-8 -*- from __future__ import print_function import pprint def pp(obj, end="\n"): print(pf(obj), end) def pf(obj): return (pprint .pformat(obj, indent=4) .decode("unicode-escape") ) if __name__ == "__main__": obj = { u"ほげ": u"ぴよ", u"nums": [1, 2, 3, u"四", u"五"], u"bool": True, } pprint.pprint(obj, indent=4) # 通常 # => # { u'bool': True, # u'nums': [1, 2, 3, u'\u56db', u'\u4e94'], # u'\u307b\u3052': u'\u3074\u3088'} pp(obj) # ユニコード対応版 # => # { u'bool': True, # u'nums': [1, 2, 3, u'四', u'五'], # u'ほげ': u'ぴよ'}
はい
pformat()
した後に .decode("unicode-escape")
でユニコードエスケープされたところを元に戻しています。
参考にしました
感謝!
私からは以上です。