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

  • 2016最简单的赚钱方法(2016赚钱最快的方法)

    2016最简单的赚钱方法(2016赚钱最快的方法)

  • 小米手表如何绑定手机(小米手表如何绑定手机号)

    小米手表如何绑定手机(小米手表如何绑定手机号)

  • iphone13快捷指令在哪(iphone13快捷指令nfc门禁卡)

    iphone13快捷指令在哪(iphone13快捷指令nfc门禁卡)

  • 抖音里面那些歌词是怎么显示的(抖音那些歌曲是怎么制作的)

    抖音里面那些歌词是怎么显示的(抖音那些歌曲是怎么制作的)

  • 华为手机怎么投屏到海信电视上(华为手机怎么投屏到汽车中控屏)

    华为手机怎么投屏到海信电视上(华为手机怎么投屏到汽车中控屏)

  • 华为p40双卡槽在哪里(华为p40双卡卡槽在哪)

    华为p40双卡槽在哪里(华为p40双卡卡槽在哪)

  • 抖音收藏的地址在哪里看(抖音收藏的地址怎么找不到)

    抖音收藏的地址在哪里看(抖音收藏的地址怎么找不到)

  • 如何消除抖音号水印(如何消除抖音视频里的抖音号)

    如何消除抖音号水印(如何消除抖音视频里的抖音号)

  • 5g手机怎么显示的还是4G啦(5g手机怎么显示2g网络)

    5g手机怎么显示的还是4G啦(5g手机怎么显示2g网络)

  • 保存别人朋友圈视频会提示吗(保存别人朋友圈的视频)

    保存别人朋友圈视频会提示吗(保存别人朋友圈的视频)

  • 拼多多好友聊天在哪(拼多多好友聊天记录别人能看见吗)

    拼多多好友聊天在哪(拼多多好友聊天记录别人能看见吗)

  • 华为恢复系统获取安装包失败(华为恢复系统获得的权限)

    华为恢复系统获取安装包失败(华为恢复系统获得的权限)

  • sip通话功能什么意思

    sip通话功能什么意思

  • iphone11pro与pro max区别(iphone11pro与promax)

    iphone11pro与pro max区别(iphone11pro与promax)

  • mate30出厂带不带膜(mate30出厂有哪些软件)

    mate30出厂带不带膜(mate30出厂有哪些软件)

  • 小米mix2s支持闪充吗(小米mix2s两个闪电)

    小米mix2s支持闪充吗(小米mix2s两个闪电)

  • 系统界面演示模式是什么(系统界面设计模板)

    系统界面演示模式是什么(系统界面设计模板)

  • 苹果11手机手写怎么设置(苹果11手机手写速度怎么设置)

    苹果11手机手写怎么设置(苹果11手机手写速度怎么设置)

  • win10如何关闭安全中心(win10如何关闭安全中心图标)

    win10如何关闭安全中心(win10如何关闭安全中心图标)

  • 苹果11微信提示音怎么换(苹果11微信提示音怎么改其他声音)

    苹果11微信提示音怎么换(苹果11微信提示音怎么改其他声音)

  • ios13可以隐藏app吗(ios13.3怎么隐藏软件)

    ios13可以隐藏app吗(ios13.3怎么隐藏软件)

  • ps4截图怎么导出 手机(ps4截图怎么导出 手机app)

    ps4截图怎么导出 手机(ps4截图怎么导出 手机app)

  • 一加七手机发布时间(一加7 发布)

    一加七手机发布时间(一加7 发布)

  • 花呗投诉能退款吗(花呗订单投诉有用吗?)

    花呗投诉能退款吗(花呗订单投诉有用吗?)

  • win10闹钟如何休眠仍然响(win10闹钟设置方法)

    win10闹钟如何休眠仍然响(win10闹钟设置方法)

  • MAC邮件客户端总是显示有未读邮件的解决方法(macbookair邮件)

    MAC邮件客户端总是显示有未读邮件的解决方法(macbookair邮件)

  • sharectl命令  配置和管理文件共享服务(-shared)

    sharectl命令 配置和管理文件共享服务(-shared)

  • pandas中如何使用split()方法分割字符串?(pandas常见操作)

    pandas中如何使用split()方法分割字符串?(pandas常见操作)

  • 暴利税怎么计算
  • 出口退税账务怎么做账
  • 城建税减半从什么时候开始
  • 增值税小规模纳税人
  • 货运代理费属于运费还是其他
  • 发票盖了财务专用章旁边再盖发票章
  • 餐饮注册个体工商户还是注册公司
  • 个税的专项扣除包括哪些内容
  • 2019一般纳税人新政策
  • 拖欠安装费
  • 人员工资薪金所得税计算税款
  • 金税盘处于报税期是什么意思
  • 免费更换配件如何做账
  • 固定资产盘盈怎么算
  • 租个人房子开发票税率是多少
  • 公司为什么要员工提供房产证
  • 三方扣款fd6
  • 6%税率的项目(不含金融商品转让)免税么
  • 一般纳税人适用税种及税率
  • 外购机器设备
  • 两年前少缴的税款是否应补缴?
  • 购买银行承兑汇票的会计分录
  • 公司投资理财产品收益怎么算
  • 对公账户资金往来会产生税吗
  • 股东以无形资产投资,撤资时怎么算
  • 旅游公司广告费支出扣除标准
  • 运输业什么进项税抵扣
  • 公司多交的公积金能退吗
  • ghost windows10安装教程
  • 关于农产品的法律
  • ryzen3 2200配显卡
  • 购买方发票已认证丢失了如何处理
  • codevein配置要求
  • 应收账款和应付账款都是负数
  • 发票作废有费用吗
  • 织梦cms怎么样
  • 一般纳税人增值税可以抵扣吗
  • 利息收入的纳税义务发生地
  • 银行贷款第三方是什么意思
  • 什么情况下核定应纳税额
  • 关联企业的费用包括
  • 电子承兑汇票的最长期限
  • Java连接sqlserver2008数据库代码
  • sql中身份证号码用什么类型
  • 管理费用明细科目大全
  • mysql中where的用法
  • 什么叫固定资产
  • 房产税城镇土地使用税申报期限
  • 库存股属于什么账户
  • 开劳务发票需要的资料是?
  • 资产减值损失如何计算
  • 建筑企业收到材料发票没有备注工程地址可以用吗
  • 哪些情况应收账款不能扣
  • 免费样品要交税么
  • 用于研发的材料如何入账
  • 收购一家公司需要多少股份
  • 需求价格弹性是ep还是ed
  • 机械租赁怎么开9个点
  • 长期待摊费用什么时候结束摊销
  • 存货怎样进行账务处理
  • 账簿凭证管理的内容
  • mysql案例分析
  • sqlserver附加数据库时出错,请单击消息中的超链接
  • spring-jdbc.jar
  • mysql字符集的作用
  • mysql修改默认字符集和校对规则
  • centos安装NVIDIA驱动
  • ubuntu系统安装教程详细
  • 如何更改win8开始菜单
  • cmd命令行删除文件
  • incorrect email format, please re-enter.
  • pphelper是什么文件
  • win7如何删除网络上的其它计算机
  • win7系统怎么设置电源
  • 搭建android开发环境实验原理
  • 常用的批处理文件
  • python socket编程教程
  • 国家税务局网上电子税务局官网重庆
  • 外地经营预缴企业所得税
  • 税务局开蔬菜普票需要几个点
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设