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最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
matplotlib绘制动画代码示例
Jan 02 Python
Django权限机制实现代码详解
Feb 05 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
Numpy之文件存取的示例代码
Aug 03 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
python将字符串转换成json的方法小结
Jul 09 Python
pycharm快捷键汇总
Feb 14 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
Python使用socket_TCP实现小文件下载功能
Oct 09 Python
Django model class Meta原理解析
Nov 14 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
带密匙的php加密解密示例分享
2014/01/29 PHP
php接口和抽象类使用示例详解
2014/03/02 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
PDO::rollBack讲解
2019/01/29 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
js a标签点击事件
2017/03/30 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
node thread.sleep实现示例
2018/06/20 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
详解django.contirb.auth-认证
2018/07/16 Python
python requests使用socks5的例子
2019/07/25 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
python实现简单井字棋游戏
2020/03/04 Python
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
学生个人求职自荐信格式
2013/09/23 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
请假条的格式
2014/04/11 职场文书
刑事申诉状范文
2015/05/20 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
2016猴年春节问候语
2015/11/11 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫
Oracle用户管理及赋权
2022/04/24 Oracle