位置: 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主题)

  • 传统企业竞价必知道的4大误区(竞价行业发展潜力)

    传统企业竞价必知道的4大误区(竞价行业发展潜力)

  • 京东卖假货怎么联系京东平台的客服

    京东卖假货怎么联系京东平台的客服

  • 爱奇艺会员分享二维码在哪里(爱奇艺会员分享电影非会员能看吗)

    爱奇艺会员分享二维码在哪里(爱奇艺会员分享电影非会员能看吗)

  • 惠普无线鼠标怎么连接(惠普无线鼠标怎么拆开)

    惠普无线鼠标怎么连接(惠普无线鼠标怎么拆开)

  • 笔记本闪屏怎么办(笔记本闪屏怎么强制关机)

    笔记本闪屏怎么办(笔记本闪屏怎么强制关机)

  • 小米10支持微信美颜吗(小米支持微信面容支付的手机)

    小米10支持微信美颜吗(小米支持微信面容支付的手机)

  • 苹果7发热(苹果7发热卡顿严重怎么办)

    苹果7发热(苹果7发热卡顿严重怎么办)

  • 微信拉黑群里说话能看见吗(微信群拉黑人他发消息我还能看见吗)

    微信拉黑群里说话能看见吗(微信群拉黑人他发消息我还能看见吗)

  • 开免打扰模式别人打电话是什么状态(开免打扰模式别人打电话会影响)

    开免打扰模式别人打电话是什么状态(开免打扰模式别人打电话会影响)

  • vivox30有些什么功能(vivox30手机优缺点评测)

    vivox30有些什么功能(vivox30手机优缺点评测)

  • opporeno3微信视频美颜怎么开(opporeno3微信视频没声音)

    opporeno3微信视频美颜怎么开(opporeno3微信视频没声音)

  • 电脑pci是什么(电脑的pci是干嘛的)

    电脑pci是什么(电脑的pci是干嘛的)

  • 大陆微信在香港能用吗(大陆微信在香港能不能付款)

    大陆微信在香港能用吗(大陆微信在香港能不能付款)

  • iphonex是iphone9吗(iPhonex是iPhone9吗)

    iphonex是iphone9吗(iPhonex是iPhone9吗)

  • ipad闪退黑屏怎么修复(ipad闪退黑屏怎么办)

    ipad闪退黑屏怎么修复(ipad闪退黑屏怎么办)

  • 飞行模式与关机的区别(飞行模式与关机别人打电话会怎么样)

    飞行模式与关机的区别(飞行模式与关机别人打电话会怎么样)

  • 金山pdf有什么用(金山pdf优缺点)

    金山pdf有什么用(金山pdf优缺点)

  • iphone11pro怎么显示电池(iphone11pro怎么显示耳机电量)

    iphone11pro怎么显示电池(iphone11pro怎么显示耳机电量)

  • vue如何设置照片时间(vue怎么设置成拍照片)

    vue如何设置照片时间(vue怎么设置成拍照片)

  • 手机淘宝授权管理在哪里(手机淘宝账号授权管理图片步骤)

    手机淘宝授权管理在哪里(手机淘宝账号授权管理图片步骤)

  • 联通4g升5g需要换卡吗(联通升5g需要换手机卡吗)

    联通4g升5g需要换卡吗(联通升5g需要换手机卡吗)

  • iphone11pro长宽(iphone11pro尺寸长宽多少厘米)

    iphone11pro长宽(iphone11pro尺寸长宽多少厘米)

  • 有效购买日期是啥意思(有效购买日期是在保修期内吗)

    有效购买日期是啥意思(有效购买日期是在保修期内吗)

  • QQ邮箱怎么文件打印(qq邮箱怎么发文件给别的邮箱)

    QQ邮箱怎么文件打印(qq邮箱怎么发文件给别的邮箱)

  • 鼠标连点怎么办(鼠标连点怎么办才能打开)

    鼠标连点怎么办(鼠标连点怎么办才能打开)

  • npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败

    npm ERR! notarget No matching version found for xxx@^1.0.64. npm 插件安装失败

  • 工商年报资产状况纳税总额怎么计算?
  • 小规模纳税人应交增值税明细科目
  • 会议费发票能抵扣吗
  • 与生产相关的关键成功因素包括
  • 报税成本费用怎么填
  • 工厂宿舍的水电安装规范图
  • 购进农产品取得3%专票怎样计算抵扣举例
  • 公司成立筹备工作小组主要任务是什么
  • 装订凭证要如何写
  • 收到的软件退税怎么处理
  • 个人装卸费如何开票
  • 消费税组成计税价
  • 政府机关有纳税识别号吗
  • 有一个公司能做多少事情
  • 金蝶k3币别汇率类型设置
  • 个体户一个月开票30万怎么上税
  • 海关对现金携带数量有要求吗
  • 预交增值税抵减申报
  • 期初存货余额在哪张表里
  • 销售购进材料会计分录
  • 设备修理费
  • 鸿蒙系统怎么自动填充密码
  • 进项发票没认证可以开红字申请单吗
  • 建筑公司分包
  • 主合同变更对保险的影响
  • wifi安全助手每日提现
  • anyproxy提高公众号文章采集效率
  • 试乘试驾车入账分录
  • 辞退补偿金额怎么做账
  • 损益类科目有哪些借贷方向
  • 企业出租房屋怎样报税
  • mysql如果不存在就创建表
  • bds.exe
  • 有关应付债券的法律规定
  • 应收账款减值损失的核算方法
  • 收到保险公司的赔款计入什么科目
  • 房地产开发间接费
  • 其他营业账簿印花税减免政策
  • 手撕代码题目集锦
  • 企业会计准则季度怎么填
  • 收押金退押金会计分录
  • 织梦怎么样
  • 其他收益包含
  • 账龄划分中有借有贷怎么分析
  • 招聘招一个人爱我图片
  • 净资产增加数怎么计算
  • 销售折扣可以开红字专票吗
  • 本月计提费用,发票下个月到可以吗
  • 管家婆进销存的凭证如何体现?
  • 银行手续费发票未到怎样做账
  • 单位缴纳的社保计入什么科目
  • 老板请员工吃饭的文案
  • 现金支付现金股利
  • 什么叫误餐费
  • 融资租赁的固定资产计提折旧吗
  • sqlserver全文索引
  • sql导入csv数据
  • win8的运行在哪里打开
  • 联想昭阳k41笔记本
  • macbookair屏幕变成横版
  • win7系统怎么调鼠标
  • centos7.6安装kvm
  • windows7的注册表在哪里
  • win7系统的文件夹怎么挪位置
  • win8 控制面板
  • html5能做游戏吗
  • android项目总结
  • android 自定义
  • unity摇杆
  • 触摸按钮失灵怎么回事
  • unity签名
  • easyui导出excel表格
  • javascript 代码
  • unity3d asset store
  • u3d transform
  • 怎样编?
  • python安装第三方模块
  • 十月报税2021
  • 广东省职称证书编号查询系统
  • 国家税务总局每家公司都可以注册吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设