python第十八天
学习内容:
json 模块,pickle模块,shelve模块,xml模块
json 模块 序列化:
1 import json,pickle 2 3 info={ 4 'name':'a', 5 'age':34, 6 'func':'' 7 } 8 with open('text.txt','w') as f: 9 #f.write(json.dumps('test.txt'))#新建一文件用于存入序列化的数据 10 f.write(json.dumps(info))#序列化
json 模块 反序列化(从另一个程序打开文件):
1 import json,pickle 2 with open('text.txt','r')as f: 3 4 fp=json.loads(f.read())#反序列化 5
#fp=json.load(f)# 效果与loads一样
6 print('\033[32;1m%s\033[0m'%fp)
pickle模块 用法,方法与jsong 一样(不同的是,pickle可以存对象格式,如有函数可以存函数的对象属性):
1 def func1(): 2 print('1111111') 3 info2={ 4 'name':'a', 5 'age':34, 6 'func':func1 7 8 } 9 with open('test','wb') as f2: 10 f2.write(pickle.dumps(info2))# ===pickle.dump(info2,f2) 效果一样
pickle模块 反序列化:
1 def func1(): 2 pass 3 4 with open('test','rb') as f2: 5 c=pickle.load(f2) 6 #c=pickle.loads(f2.read())#效果与loads一样 7 8 print(c)
shelve模块(相当于可以多次ldump,和load):
shelve采用key与vaule对应的字典方式,通过文件对数据进行持久化--可以持久化任何pickle可支持的python数据格式:
1 import shelve 2 3 def func_1(name,age):#定义一个函数 4 print(name,age) 5 6 name=['a','b','c','d']#定义一个列表 7 age=[1,2,3,4] 8 9 d=shelve.open('test_3.txt')#用shelve来打开文件 10 11 #将各个对象存入文件 12 d['name']=name 13 d['age']=age 14 d['func']=func_1 15 d.close()
shelve,反序列化:
1 import shelve 2 def func_1(name,age):#定义一个函数与shelve存入的函数名相同 3 print(age) 4 f=shelve.open('test_3.txt')#打开之前存入数据的文件 5 6 name=f['name']#提取出对应的数据name 7 print(name) 8 9 age=f['age']#提取出对应的数据age 10 func_1=f['func']#提取出对应的数据func_1 11 func_1(name,age)#提取出对应的数据
xml模块:创建,读取,修改,删除
创建:
1 import xml.etree.ElementTree as ET 2 3 test_xml=ET.Element('test_1')#创建XML文档赋于变量 4 name=ET.SubElement(test_xml,'name',attrib={'name':'efg1'})#添加子节点 5 age=ET.SubElement(name,'age')#子节点添加子节点 6 age.text='23'#添加内容 7 obj=ET.SubElement(name,'obj') 8 obj.text='IT' 9 10 name=ET.SubElement(test_xml,'name',attrib={'name':'efg2'})#添加子节点 11 age=ET.SubElement(name,'age')#子节点添加子节点 12 age.text='24'#添加内容 13 obj=ET.SubElement(name,'obj') 14 obj.text='MAG' 15 16 name=ET.SubElement(test_xml,'name',attrib={'name':'efg3'})#添加子节点 17 age=ET.SubElement(name,'age')#子节点添加子节点 18 age.text='42'#添加内容 19 obj=ET.SubElement(name,'obj') 20 obj.text='HR' 21 22 et=ET.ElementTree(test_xml)#生成文档对象 23 et.write('test_1',encoding='utf-8',xml_declaration=True) 24 25 ET.dump(et)#打印输出文档对象
创建的结果为:
1 <?xml version='1.0' encoding='utf-8'?> 2 <test_1> 3 <name name="efg1"> 4 <age>23</age> 5 <obj>IT</obj> 6 </name> 7 <name name="efg2"> 8 <age>24</age> 9 <obj>MAG</obj> 10 </name> 11 <name name="efg3"> 12 <age>42</age> 13 <obj>HR</obj> 14 </name> 15 </test_1>
读取:
1 import xml.etree.ElementTree as ET 2 3 tree=ET.parse('test_1')#打开读取文件内容到变量 4 root=tree.getroot()#获取根节点 5 # for child in root:#遍历节点 6 # print(child.tag,child.attrib)#输出标签,属性 7 # for i in child:#遍历子节点 8 # print(i.tag,i.text)#输出标签和内容 9 10 for x in root.iter('age'):#输出指定标签内容 11 print(x.tag,x.text)
修改:
1 import xml.etree.ElementTree as ET 2 3 tree=ET.parse('test_1')#打开读取文件内容到变量 4 root=tree.getroot()#获取根节点 5 6 for node in root.iter('age'):#获取到指定标签 7 new_age=int(node.text)+3 #对age的内容值进行修改 8 node.text=str(new_age)#对其内容重新赋值 9 node.set('uppdate','yes')#添加新的属性值 10 tree.write('test_2.xml')#新重写入文档
1 <test_1> 2 <name name="efg1"> 3 <age uppdate="yes">26</age> 4 <obj>IT</obj> 5 </name> 6 <name name="efg2"> 7 <age uppdate="yes">27</age> 8 <obj>MAG</obj> 9 </name> 10 <name name="efg3"> 11 <age uppdate="yes">45</age> 12 <obj>HR</obj> 13 </name> 14 </test_1>
删除:
1 import xml.etree.ElementTree as ET 2 3 tree=ET.parse('test_1')#打开读取文件内容到变量 4 root=tree.getroot()#获取根节点 5 6 7 for country in root.findall('name'):#获取指定标签名的所有标签 8 age=int(country.find('age').text)#获取标签对应 的值 9 if age>25: 10 root.remove(country)#进行删除 11 else: 12 pass 13 14 tree.write('test_3.xml')
删除结果:
1 <test_1> 2 <name name="efg1"> 3 <age>23</age> 4 <obj>IT</obj> 5 </name> 6 <name name="efg2"> 7 <age>24</age> 8 <obj>MAG</obj> 9 </name> 10 </test_1>
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【莫柔落切】!
联系或打赏博主【莫柔落切】!https://home.cnblogs.com/u/uge3/