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实现提取谷歌音乐搜索结果的方法
Jul 10 Python
python模拟Django框架实例
May 17 Python
Python入门学习指南分享
Apr 11 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
Python实现Singleton模式的方式详解
Aug 08 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
详解Python中import机制
Sep 11 Python
Python如何配置环境变量详解
May 18 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
JS继承用法实例分析
2015/02/05 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python获取任意xml节点值的方法
2015/05/05 Python
python创建进程fork用法
2015/06/04 Python
Python之os操作方法(详解)
2017/06/15 Python
Python中装饰器高级用法详解
2017/12/25 Python
python各类经纬度转换的实例代码
2019/08/08 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
公司市场部岗位职责
2013/12/02 职场文书
医学生职业规划范文
2014/01/05 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书