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('33[32;1m%s33[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)#打印输出文档对象
View Code

创建的结果为:

 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/

原文地址:https://www.cnblogs.com/uge3/p/6882291.html