http://blog.csdn.net/liukeforever/article/details/8982323
python格式化dict输出
如果dict里有unicode or utf-8编码的字符串,缺省是:
In [75]: dd = { 'name': u'功夫熊猫' }
In [76]: dd
Out[76]: {'name': u'\u529f\u592b\u718a\u732b'}
In [77]: dd2 = { 'name': '功夫熊猫' }
In [78]: dd2
Out[78]: {'name': '\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab'}
输出中文不直观,有一种方法是把dict转化成josn格式的字符串输出
print simplejson.dumps(dd, ensure_ascii=False)
这种方法的缺点是不太美观
现在介绍另一种方法
In [75]: dd = { 'name': u'功夫熊猫' }
In [76]: dd
Out[76]: {'name': u'\u529f\u592b\u718a\u732b'}
In [77]: dd2 = { 'name': '功夫熊猫' }
In [78]: dd2
Out[78]: {'name': '\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab'}
输出中文不直观,有一种方法是把dict转化成josn格式的字符串输出
print simplejson.dumps(dd, ensure_ascii=False)
这种方法的缺点是不太美观
现在介绍另一种方法
- #coding=utf-8
- import pprint, cStringIO
- class UniPrinter(pprint.PrettyPrinter):
- def format(self, obj, context, maxlevels, level):
- if isinstance(obj, unicode):
- out = cStringIO.StringIO()
- out.write('u"')
- for c in obj:
- if ord(c)<32 or c in u'"\\':
- out.write('\\x%.2x' % ord(c))
- else:
- out.write(c.encode("utf-8"))
- out.write('"''"')
- # result, readable, recursive
- return out.getvalue(), True, False
- elif isinstance(obj, str):
- out = cStringIO.StringIO()
- out.write('"')
- for c in obj:
- if ord(c)<32 or c in '"\\':
- out.write('\\x%.2x' % ord(c))
- else:
- out.write(c)
- out.write('"')
- # result, readable, recursive
- return out.getvalue(), True, False
- else:
- return pprint.PrettyPrinter.format(self, obj,
- context,
- maxlevels,
- level)
- #UniPrinter().pprint({ u'k"e\\y': u'我爱ä¸*国人' })
- print { 'name': u'功夫熊猫' }
- UniPrinter().pprint({ 'name': u'功夫熊猫' })
- UniPrinter().pprint({'name': '\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab'})
- UniPrinter().pprint({'name':'\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab', 'age':22, 'address':'yydg.com.cn', 'male':True})
In [75]: dd = { 'name': u'功夫熊猫' }
In [76]: dd
Out[76]: {'name': u'\u529f\u592b\u718a\u732b'}
In [77]: dd2 = { 'name': '功夫熊猫' }
In [78]: dd2
Out[78]: {'name': '\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab'}
输出中文不直观,有一种方法是把dict转化成josn格式的字符串输出
print simplejson.dumps(dd, ensure_ascii=False)
这种方法的缺点是不太美观
现在介绍另一种方法
- #coding=utf-8
- import pprint, cStringIO
- class UniPrinter(pprint.PrettyPrinter):
- def format(self, obj, context, maxlevels, level):
- if isinstance(obj, unicode):
- out = cStringIO.StringIO()
- out.write('u"')
- for c in obj:
- if ord(c)<32 or c in u'"\\':
- out.write('\\x%.2x' % ord(c))
- else:
- out.write(c.encode("utf-8"))
- out.write('"''"')
- # result, readable, recursive
- return out.getvalue(), True, False
- elif isinstance(obj, str):
- out = cStringIO.StringIO()
- out.write('"')
- for c in obj:
- if ord(c)<32 or c in '"\\':
- out.write('\\x%.2x' % ord(c))
- else:
- out.write(c)
- out.write('"')
- # result, readable, recursive
- return out.getvalue(), True, False
- else:
- return pprint.PrettyPrinter.format(self, obj,
- context,
- maxlevels,
- level)
- #UniPrinter().pprint({ u'k"e\\y': u'我爱ä¸*国人' })
- print { 'name': u'功夫熊猫' }
- UniPrinter().pprint({ 'name': u'功夫熊猫' })
- UniPrinter().pprint({'name': '\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab'})
- UniPrinter().pprint({'name':'\xe5\x8a\x9f\xe5\xa4\xab\xe7\x86\x8a\xe7\x8c\xab', 'age':22, 'address':'yydg.com.cn', 'male':True})