python对齐打印_Python 对齐打印对象属性

对齐打印对象属性python

print 输出对象 dict 全挤在一行,很难看。所以但愿输出相似 json 对齐的方式。json

基本的思想是转成 json 格式再输出。随便一搜,找到以下代码,普通状况下可用:code

def obj_to_json():

stu = Student(28, 'male', '13000000000', '123@qq.com')

print(type(stu)) #

print(stu)

stu = stu.__dict__ # 将对象转成dict字典

print(type(stu)) #

print(stu)

j = json.dumps(obj=stu, indent=4)

print(j)

但有些对象中会包含一些特殊属性,如另一个对象,则用此法会报错:对象

TypeError: Object of type xxx is not JSON serializable

其实就是 JSON 不支持这种对象。咱们能够自定义处理特殊对象的方法,完整代码以下:utf-8

# encoding:utf-8

# author: over

import json

from datetime import datetime, date

class Student(object):

def __init__(self, age, sex, mobile, date):

self.age = age

self.sex = sex

self.mobile = mobile

self.date = date

# 扩展 json 没法解析的类型

class ComplexEncoder(json.JSONEncoder):

def default(self, obj):

if isinstance(obj, datetime):

# return obj.strftime('%Y-%m-%d %H:%M:%S')

return str(obj)

elif isinstance(obj, date):

# return obj.strftime('%Y-%m-%d')

return str(obj)

else:

try:

return json.JSONEncoder.default(self, obj)

except Exception as e:

print('type not support: '+str(obj))

# 默认的处理不了直接强转字符串

return str(obj)

# json 对齐方式输出对象全部属性,方便查看

def printJson(obj):

if hasattr(obj,'__dict__'):

obj = obj.__dict__

# ensure_ascii=False 中文不变成百分符

# indent 缩进行增长的空格数

j = json.dumps(obj, cls=ComplexEncoder, ensure_ascii=False, indent=4)

print(j)

if __name__ == '__main__':

stu = Student(28, 'male', '13000000000', datetime.now())

printJson(stu)

输出:ci

{

"age": 28,

"sex": "male",

"mobile": "13000000000",

"date": "2019-07-07 14:43:51.466416"

}字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值