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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
跟老齐学Python之集合的关系
Sep 24 Python
详解Python的Django框架中的通用视图
May 04 Python
日常整理python执行系统命令的常见方法(全)
Oct 22 Python
python将字典内容存入mysql实例代码
Jan 18 Python
django自带的server 让外网主机访问方法
May 14 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
python调用百度REST API实现语音识别
Aug 30 Python
Django之模型层多表操作的实现
Jan 08 Python
Python中使用gflags实例及原理解析
Dec 13 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
基于python实现操作git过程代码解析
Jul 27 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 - Html Transfer Code
2006/10/09 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
非常好的js代码
2006/06/27 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
JS继承实现方法及优缺点详解
2020/09/02 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
pymysql模块的操作实例
2019/12/17 Python
Pytorch 实现权重初始化
2019/12/31 Python
python初步实现word2vec操作
2020/06/09 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
web字体加载方案优化小结
2019/11/29 HTML / CSS
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
乡镇庆八一活动方案
2014/02/02 职场文书
小学毕业演讲稿
2014/04/25 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
财务总监岗位职责
2015/02/03 职场文书
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS