参考:http://www.cnblogs.com/alan-babyblog/p/5209717.html
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load
pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load (不仅可以序列化字典,列表...还可以把一个程序,一个类给序列化掉)
python的具体实现的例子
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import json, pickle 5 6 data = {'k1':123, 'k2':'hello'} 7 8 ## json 9 # json.dumps 将数据通过特殊的形式转换为所有程序都识别的字符串 10 j_str = json.dumps(data) 11 print(j_str) #{"k2": "hello", "k1": 123} 12 13 # json.loads 读取json.dumps特殊处理后的数据并返回该对象 14 j_str_loads = json.loads(j_str) 15 print(j_str_loads) #{'k2': 'hello', 'k1': 123} 16 17 # json.dump 将数据通过特殊的形式转换为所有程序都识别的字符串,并写入文件 18 with open('file.json', 'w') as fp: 19 json.dump(data, fp) 20 21 with open('file.json', 'r') as fp: 22 data_j_load = json.load(fp) 23 print(data_j_load) #{'k2': 'hello', 'k1': 123} 24 25 26 ## pickle 27 # pickle.dumps将数据通过特殊的形式转换成只有python语言能识别的字符串 28 p_str = pickle.dumps(data) 29 print(p_str) #b'x80x03}qx00(Xx02x00x00x00k2qx01Xx05x00x00x00helloqx02Xx02x00x00x00k1qx03K{u.' 30 31 # pickle.loads 读取pickle.dumps特殊处理后的数据并返回该对象 32 p_loads = pickle.loads(p_str) 33 print(p_loads) #{'k2': 'hello', 'k1': 123} 34 35 # pickle.dump将数据通过特殊的形式转换成只有python语言识别的字符串,并写入文件 36 with open('file.pickle', 'wb') as fp: 37 pickle.dump(data, fp) 38 39 # pickle.loads 从文件中读取pickle.dumps特殊处理后的数据并返回该对象 40 with open('file.pickle', 'rb') as fp: 41 data_p_load = pickle.load(fp) 42 print(data_p_load) #{'k2': 'hello', 'k1': 123}
xml
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。
xml的格式如下,就是通过<>节点来区别数据结构的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<? xml version="1.0"?> < data > < country name="Liechtenstein"> < rank updated="yes">2</ rank > < year >2008</ year > < gdppc >141100</ gdppc > < neighbor name="Austria" direction="E"/> < neighbor name="Switzerland" direction="W"/> </ country > < country name="Singapore"> < rank updated="yes">5</ rank > < year >2011</ year > < gdppc >59900</ gdppc > < neighbor name="Malaysia" direction="N"/> </ country > < country name="Panama"> < rank updated="yes">69</ rank > < year >2011</ year > < gdppc >13600</ gdppc > < neighbor name="Costa Rica" direction="W"/> < neighbor name="Colombia" direction="E"/> </ country > </ data > |
xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml
xml 的实现代码
1 #!/usr/bin/env python 2 ''' 3 xml 格式概述 4 有根节点、子节点 属性 值得概念 有类似于html的开始和结束 5 ''' 6 import xml.etree.ElementTree as ET 7 8 tree = ET.parse("xmltest.xml") 9 root = tree.getroot() 10 print(root.tag) ###data 11 12 ''' 13 #遍历xml文档 14 for child in root: 15 print(child.tag, child.attrib) 16 for i in child: 17 print("--->",i.tag,i.text) ###列出子序列的所有数据 18 19 #只遍历year 节点 20 for node in root.iter('year'): ###iter 方法 有过滤的意思 21 print(node.tag,node.text) ##列出年份 node.tag tag 有标记的意思 node.text text 有值的意思 22 23 24 #修改 25 for node in root.iter('year'): 26 new_year = int(node.text) + 1 ###将node.text int化 27 node.text = str(new_year) 28 node.set("updated","yes") 29 30 tree.write("xmltest-1.xml") ###新的内容在年份的位置上就加1了 31 32 #删除node 33 for country in root.findall('country'): 34 rank = int(country.find('rank').text) 35 if rank > 50: 36 root.remove(country) 37 38 tree.write('output.xml') #####结果是把大于50的panma 这个国家下面的内容就删除了 39 ''' 40 41 ###新建 xml 42 new_xml = ET.Element("namelist") 43 name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"}) ###enrolled 是注册的意思 44 age = ET.SubElement(name,"age",attrib={"checked":"no"}) 45 sex = ET.SubElement(name,"sex") 46 age.text = '33' 47 sex.text = 'female' 48 name2 = ET.SubElement(new_xml,"name2",attrib={"enrolled":"no"}) 49 age = ET.SubElement(name2,"age") 50 sex = ET.SubElement(name2,"sex") 51 age.text = '19' 52 sex.text = 'male' 53 et = ET.ElementTree(new_xml) #生成文档对象 54 et.write("test.xml", encoding="utf-8",xml_declaration=True) 55 56 ET.dump(new_xml) #打印生成的格式 57 58 59 #结果会生成如下所示的情况 60 ''' 61 <?xml version='1.0' encoding='utf-8'?> 62 <namelist> 63 <name enrolled="yes"> 64 <age checked="no">33</age> 65 <sex>female</sex> 66 </name> 67 <name2 enrolled="no"> 68 <age>19</age> 69 <sex>male</sex> 70 </name2> 71 </namelist> 72 '''