位置: IT常识 - 正文

Python如何利用动态属性处理JSON数据源(python 动态)

编辑:rootadmin

推荐整理分享Python如何利用动态属性处理JSON数据源(python 动态),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:用python做动图,python 动态数据,python 动态数据,python 动态数据,pythondone,如何用python做动图,python 动态,如何用python做动图,内容如对您有帮助,希望把文章链接给更多的朋友!

利用动态属性处理JSON数据源

属性:在Python中,数据的属性和处理数据的方法统称属性。

元编程:用元类进行编程,元类→类→对象,元类比类更抽象,生成类的类。

Python如何利用动态属性处理JSON数据源(python 动态)

1、使用动态属性访问JSON类数据

第一版:利用json.load(fp)审查数据

fromurllib.requestimporturlopenimportwarningsimportosimportjsonURL='http://www.oreilly.com/pub/sc/osconfeed'JSON='data/osconfeed.json'defload():ifnotos.path.exists(JSON):msg='downloading{}to{}'.format(URL,JSON)warnings.warn(msg)#如果需要下载就发出提醒。withurlopen(URL)asremote,open(JSON,'wb')aslocal:#在with语句中使用两个上下文管理器分别用于读取和保存远程文件。local.write(remote.read())withopen(JSON)asfp:returnjson.load(fp)#json.load函数解析JSON文件,返回Python原生对象。

第二版:使用动态属性访问JSON类数据

第一版查阅深层数据的格式比较冗长,例如feed'Schedule'40,我们希望在读取属性上采用feed.Schedule.events[40].name这类方式来改进。并且第二版的类能递归,自动处理嵌套的映射和列表。

fromcollectionsimportabcclassFronenJSON():def__init__(self,mapping):self.__data=dict(mapping)#创建副本,同时确保处理的是字典。def__getattr__(self,name):#仅当没有指定名称的属性才调用__getattr__方法。ifhasattr(self,name):returngetattr(self.__data,name)else:returnFronenJSON.build(self.__data[name])@classmethoddef__build__(cls,obj):ifisinstance(obj,abc.Mapping):#判断obj是否是映射。returncls(obj)#创建FrozenJSON对象。elifisinstance(obj,abc.MutableSequence):return[cls.build(item)foriteminobj]#递归调用.build()方法,构建一个列表。else:#既不是字典也不是列表,则返回元素本身。returnobj

分析: FronenJSON类的关键是__getattr__方法。仅当无法使用常规的方式获取属性(即在实例、类或超类中找不到指定的属性),解释器才会调用特殊的__getattr__方法。

相关推荐:《Python视频教程》

2、处理无效属性名

在Python中,由于关键字被保留,名称为关键字的属性是无效的。因此需要对第二版中的__init__进行改进:

def__init__(self,mapping):self.__data={}forkey,valueinmapping.items():ifkeyword.iskeyword(key):key+='_'#与Python关键字重复的key在尾部加上下划线。self.__data[key]=value

3、使用特殊方法__new__

fromcollectionsimportabcclassFronenJSON():def__new__(cls,arg):#__new__是类方法,第一个参数是类本身cls。ifisinstance(arg,abc.Mapping):returnsuper().__new__(cls)#委托给超类object基类的__new__方法处理。elifisinstance(arg,abc.MutableSequence):#余下方法与原先的build方法一致。return[cls(item)foriteminarg]else:returnargdef__init__(self,mapping):self.__data={}forkey,valueinmapping.items():ifkeyword.iskeyword(key):key+='_'self.__data[key]=valuedef__getattr__(self,name):ifhasattr(self,name):returngetattr(self.__data,name)else:returnFronenJSON(self.__data[name])
本文链接地址:https://www.jiuchutong.com/zhishi/303320.html 转载请保留说明!

上一篇:做大屏的四款可视化工具(大屏制作教程视频)

下一篇:Matery主题自定义(一)黑夜模式(华为mate主题)

  • 现金回收期计算公式
  • 疫情期间固定资产折旧优惠政策
  • 委托加工业务中,委托方是纳税义务人
  • 年末结转净利润
  • 餐饮业税务申报
  • 现金盘亏无法查明原因计入什么科目
  • 残保金2018
  • 计提缴纳印花税怎么做账
  • 挂其他应付款的会计分录
  • 价外补贴需要交增值税吗
  • 补提企业所得税会计分录
  • 购买办公楼支付相关手续费
  • 土地投资入股交什么税
  • 税率与征收率有关系吗
  • 营改增后征收增值税的税目
  • 金税三期的内容
  • 一般纳税人上个月没有申报这个月申报不了
  • 小规模应税行为扣除额计算
  • 企业所得税季报营业收入,营业成本怎么填
  • 个人房屋租赁税率2023年
  • 盈余公积补亏影响资产吗
  • 上个月印花税少计提了怎么办
  • 小规模纳税人的增值税账务处理
  • 坏账准备转回影响应交所得税吗
  • 如何在Windows10中打开命令提示符?
  • 员工垫付费用多久报销合理
  • 公司租房中介费能报销吗
  • php中如何使用session
  • 鸿蒙系统怎么设置双击亮屏
  • 期间费用包含哪些
  • 违约金的增值税税率
  • 车辆维修费怎么做分录
  • php接收ajax请求
  • thinkphp生成html
  • php array_reverse 以相反的顺序返回数组实例代码
  • 体验了才明白的作文范文
  • smarty模板引擎
  • ls命令的作用
  • 在职工教育经费包括哪些
  • 个税可以补申报几个月的码
  • 公司注销其他应收款怎么冲平
  • 外币账户的设置在哪里
  • 建行E信通贴现需要发票吗
  • 招待客户对公司的重要性
  • 食堂的帐怎么做
  • 销售货物物流运输丢失取得赔偿款需要缴纳企业所得税吗
  • 长期待摊费用装修费分摊分录
  • 公司注销时应付账款怎么处理
  • 电子发票不小心删掉了怎么办
  • 现金支付中的现金是什么
  • 普通发票怎么开?
  • 营业外收入属于借方还是贷方
  • mysql zip archive 版本(5.7.19)安装教程详细介绍
  • mysql安装使用教程
  • iis w3svc
  • 什么是活动目录和域
  • centos6.8图形界面
  • win8怎么添加打印机到电脑上
  • win7如何开机修复系统
  • win8应用商店在哪
  • red hat linux怎么用
  • 批量win10激活码怎么弄
  • Unity3d_NGUI和UGUI的学习
  • opengl画矩形函数
  • bootstrap页面代码
  • js中iframe
  • 在指定目录查找的文件
  • ip安全策略设置报错
  • JQuery Ajax WebService传递参数的简单实例
  • androiddialog圆角
  • android单选
  • 每天一篇日记100字
  • 深圳国税局发票查询
  • 地税局属于哪个部门管
  • 党建引领结对共建生态
  • 住房货币化什么意思
  • 电子票怎么申领到开票系统
  • 2023居民医保怎么交
  • 工会经费支出审批制度
  • 地税纳税申报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设