Python xml、字典、json、类四种数据类型如何实现互相转换


Posted in Python onMay 27, 2020

之前都是直接拿sax,或dom等库去解析xml文件为Python的数据类型再去操作,比较繁琐,如今在写Django网站ajax操作时json的解析,发现这篇帖子对这几种数据类型的转换操作提供了另一种更简洁的方法,xmltodict和 dicttoxml等库功不可没,几种转换方式也都比较全面,转存一下以备不时之需,感谢原创整理!

注:xml、字典、json、类四种数据的转换,从左到右依次转换,即xml要转换为类时,先将xml转换为字典,再将字典转换为json,
最后将json转换为类。

1、解析xml文件:使用iterfind寻找节点,获取子节点方法 list(节点),获取节点属性 get(属性名),下一级节点的值findtext

from xml.etree.ElementTree import parse
try:
  doc=parse('b.xml')
  for item in doc.iterfind('class'):
      classname=item.get('a_name')
      print("classname=",classname)
      for s in list(item):
        name=s.findtext('name')
        age = s.findtext('age')
        sex = s.findtext('sex')
        print("name=",name,"age=",age,"sex=",sex)
      print("-------------------")
except Exception as e:
  print(e)

2、字典转换为xml文件:使用dicttoxml模块,方法:dicttoxml.dicttoxml(字典数据,根节点名称 custom_root='')import dicttoxml

from xml.dom.minidom import parseString
import os
d=[20,'name',
  {'name':'apple','num':10,'price':23},
  {'name': 'pear', 'num': 20, 'price': 18.7},
  {'name': 'banana', 'num': 10.5, 'price': 23}]
bxml=dicttoxml.dicttoxml(d,custom_root='fruit')
xml=bxml.decode('utf-8')
print(xml)
dom=parseString(xml)
pxml=dom.toprettyxml(indent='  ')
f=open('fruits.xml','w',encoding='utf-8')
f.write(pxml)
f.close()

3、xml文件转为字典:使用xmltodict模块 ,方法:xmltodict.parse(xml字符串)

import xmltodict
import pprint
f=open('fruits.xml')
xml=f.read()
d=xmltodict.parse(xml)
pp=pprint.PrettyPrinter(indent=4)
pp.pprint(d)#可以通过d['root']['arg']['#text']来访问节点中的文本值,d['root']['arg']['@p']来访问属性值
f.close()

4、字典转换为json:使用json的dumps方法

import json
data={'name':'bill','company':'huawei','age':30}
jsonstr=json.dumps(data)
print(jsonstr)

5、json转换为字典:使用json模块的loads函数,传入json字符串,返回该字符串对应的字典

d=json.loads(jsonstr)
print(d)

6、json转换为类实例,

1)、在指定的类中必须有一个接受字典的构造函数;或指定回调函数json2Product;

2)、使用json的loads方法(json字符串,object_hook=类名或者回调函数名)

import json
class Product:
  def __init__(self,d):
    self.__dict__=d
def json2Product(d):
  return Product(d)
f=open('products.json','r',encoding='utf-8')
strjson=f.read()
products=json.loads(strjson,object_hook=Product)
for p in products:
  print('name=',p.name,'price=',p.price)

7、 类实例转换为json:1)、指定回调函数(product2Dict)2、使用json的dump函数,指定default参数的回调函数import json

def product2Dict(product):
  return {
    'name': product.name,
    'price': product.price,
    'count': product.count
    }
strJson=json.dumps(products,default=product2Dict)
print(strJson)

8、字典转换为类:1)、将字典转换为json 2)、json转换为类

import json
data=[{"name": "iPhone9", "price": 9999, "count": 3000}, {"name": "tesila", "price": 800000, "count": 122}]
# 将字典转换为json
jsonstr=json.dumps(data)
class Product:
  def __init__(self,d):
    self.__dict__=d
def json2Product(d):
  return Product(d)
# 将json转换为类
ps=json.loads(jsonstr,object_hook=Product)
for p in ps:
  print('name=', p.name, 'price=', p.price)

9、将类转换为字典:1)、类转换为json,使用json的dumps方法 2)、json转为字典,使用json的loads方法

def product2Dict(product):
  return {
    'name': product.name,
    'price': product.price,
    'count': product.count
    }
# 将类转换为json
strJson=json.dumps(ps,default=product2Dict)
print(strJson)
d=json.loads(strJson)
print(d)

10、json转xml 1)、先将xml转换为字典 2)、再使用dicttoxml转换为字典

import json
import dicttoxml
f=open('products.json','r',encoding='utf-8')
jsonstr=f.read()
# 将json转换为字典
d=json.loads(jsonstr)
print(d)
# 将字典转换为xml
bxml=dicttoxml.dicttoxml(d,custom_root='fruit')
print(bxml)

11、将xml转换为json 1)、先使用xmltodict转换为字典2)、再将字典转换为json

import xmltodict
import json
f=open('products.xml','r',encoding='utf-8')
d=f.read()
#先将xml转换为字典
data=xmltodict.parse(d)
print(data)
#再将字典转换为json
strjson=json.dumps(data)
print(strjson)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的super用法详解
May 28 Python
基于Python闭包及其作用域详解
Aug 28 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
python pandas时序处理相关功能详解
Jul 03 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
python返回数组的索引实例
Nov 28 Python
python标准库os库的函数介绍
Feb 12 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
Feb 28 Python
python微信公众号开发简单流程实现
Mar 09 Python
Python中return函数返回值实例用法
Nov 19 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 #Python
Python列表如何更新值
May 27 #Python
Python模拟伯努利试验和二项分布代码实例
May 27 #Python
基于python纯函数实现井字棋游戏
May 27 #Python
Python实现读取并写入Excel文件过程解析
May 27 #Python
Python正则表达式如何匹配中文
May 27 #Python
使用python创建Excel工作簿及工作表过程图解
May 27 #Python
You might like
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
小程序实现列表展开收起效果
2020/07/29 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
Python在线运行代码助手
2016/07/15 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
小学教师事迹材料
2014/01/13 职场文书
理想演讲稿范文
2014/05/21 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
Python+DeOldify实现老照片上色功能
2022/06/21 Python