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 相关文章推荐
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
NumPy统计函数的实现方法
Jan 21 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
如何用python插入独创性声明
Mar 31 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中Smarty模板初体验
2011/08/08 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
php接口隔离原则实例分析
2019/11/11 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
可口可乐广告词
2014/03/20 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
学校通报表扬范文
2015/05/04 职场文书
观后感开头
2015/06/19 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python