zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    宋宝华:slab在内核内存管理和用户态Memcached的双重存在
    能感知功耗的Linux调度器(EAS)
    内存检测王者之剑—valgrind
    随心所动,厂商的CPU核管理策略介绍
    一文读懂 进程怎么绑定 CPU
    Fastbootd实现原理分析
    cachestat、cachetop、pcstat-linux系统缓存命中率分析工具
    WIFI的WPS和pin码(测试失败)
    视频下载(钉钉、B站等) 解决方案
    DevExpress 报表设计文件(.vsrepx)不显示或显示空白
  • 原文地址:https://www.cnblogs.com/uge3/p/6882291.html
Copyright © 2011-2022 走看看