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

  • 税务一证通
  • 共享税种
  • 甲乙公司与银行之间的往来如何记账
  • 金蝶结转销售成本
  • 补贴收入如何入账
  • 母公司与子公司的区别
  • 管理不善进项税额转出会计分录
  • 公司报销房租还能扣税吗
  • 房屋租赁收入还需要缴纳附加税吗
  • 小规模纳税人处置固定资产的税率
  • 房地产企业对外投资案例
  • 固定资产的净收益和净损失怎么计算
  • 传媒公司发传单
  • 可供出售交易性金融资产申报表怎么填
  • 预收账款核销的流程
  • 增值税普通发票税率
  • 公司车辆高速费用能开增值税专用发票吗
  • 电梯的运行与维护
  • 买二手车转让费一般要多少钱
  • 存货的入账价值怎么计算
  • win11家庭版怎么激活
  • 资产负债比和资产负债率
  • 会计中如何区分借方和贷方
  • 社保买房公积金
  • 用友财务软件怎样
  • php数组函数输出《咏雪》里有多少"片"字
  • centos7安装php7.3
  • win10怎么隐藏菜单栏图标
  • win10关闭端口号
  • 企业注销时实收资本需要交税吗
  • 高新技术企业取消资格怎么处罚
  • php imagestring
  • 跨年发票可以到次年几月份
  • 缴医保分录
  • php实现微信公众号分享
  • 使用php连接数据的方法
  • 商业汇票不带息到银行办理贴现公式
  • 手把手教你用气焊视频
  • 企业在建工程领用原材料的会计分录
  • 金税盘怎么设置字体
  • 实收资本的会计处理
  • 社保和公积金在不同单位交可以吗
  • mysql数据库维护
  • 增值税和所得税不一致的说明
  • 先开票后出库会计处理
  • 以前年度损益调整
  • 股东撤资如何退还资金,用途写什么
  • 发工资的是会计还是出纳
  • 不需要计提折旧的情况
  • 疫情期间公司购买物品
  • 应收账款占比高受哪些因素影响
  • 企业购买银行理财产品的会计处理
  • 哪些企业需要社工
  • 一般纳税人购买固定资产进项税可以抵扣吗
  • 餐饮食材成本高怎么形容
  • MySQL中truncate误操作后的数据恢复案例
  • sql server的基本概念
  • 硬盘安装后不显示
  • win1020h2版本问题
  • winctlad.exe - winctlad是什么进程
  • windows运行不了怎么办
  • 创建自己的app外卖平台
  • android使用教程
  • 合并一个文件夹下多个工作簿
  • nodejs基础知识
  • python中的字符串必须写在一对双引号中
  • unityshader
  • javascript基础笔记
  • javascript视频教程推荐
  • android fragmentation
  • 亮屏功能
  • 嵌入式安卓开发入门
  • 四川省网上税务局申报流程
  • 互城通怎么用微信充值
  • 北京交通政务
  • 出口退税报关单在哪里打印
  • 中心组学习的意义?
  • 国家税务总局局官网
  • 关于保安公司词语
  • 诺诺网电子发票下载到手机
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设