1. pickle是一个用来序列化的模块
    序列化是什么?
    指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上
  2.  
  3. 反序列化?
    将硬盘上存储的中间格式数据在还原为内存中的数据结构
  4.  
  5. 为什么要序列化?
    就是为了将数据持久存储
    之前学过的文件也能完成持久化存储 但是操作起来非常麻烦
  6.  
  7. pickle模块主要功能
    dump
    load
    dumps
    loads
    dump是序列化
    load反序列化
    不带s的是帮你封装write read 更方便
  8.  
  9. load函数可以多次执行 每次load 都是往后在读一个对象 如果没有了就抛出异常Ran out of input
  1. # pickle支持python中所有的数据类型
    user = {"name":name,"password":password,"height":height,"hobby":hobby,"test":3}
  2.  
  3. # 序列化的过程
    # with open("userdb.pkl","ab") as f:
    # userbytes = pickle.dumps(user)
    # f.write(userbytes)
  4.  
  5. # 反序列化过程
    # with open("userdb.pkl","rb") as f:
    # userbytes = f.read()
    # user = pickle.loads(userbytes)
    # print(user)
    # print(type(user))
    #
  6.  
  7. #dump 直接序列化到文件
    # with open("userdb.pkl","ab") as f:
    # pickle.dump(user,f)
  8.  
  9. # #load 从文件反序列化
    with open("userdb.pkl","rb") as f:
    user = pickle.load(f)
    print(user)
  10.  
  1. shelve模块 也用于序列化
    它于pickle不同之处在于 不需要关心文件模式什么的 直接把它当成一个字典来看待
    它可以直接对数据进行修改 而不用覆盖原来的数据
    pickle 你想要修改只能 wb模式来覆盖
  1. 例子:
    import shelve
    # user = {"name":"军"}
    # s = shelve.open("userdb.shv")
    # s["user"] = user
    # s.close()
  2.  
  3. s = shelve.open("userdb.shv",writeback=True)
    print(s["user"])
    s["user"]["age"] = 20 # 若要修改数值 上面需要把writeback修改为Ture 默认不需要添加
  1. s.close()
  1.  
  2.             json模块
  1. pickle shevle 序列化后得到的数据 只有python才能解析
    通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互
    我们必须保证这个数据 能够跨平台使用
  2.  
  3. JSON是什么? java script object notation 就是的对象表示法
    var obj = {"name":"egon"}
    对于我们开发而言 json就是一种通用的数据格式 任何语言都能解析
  4.  
  5. js 中的数据类型 python数据类型 的对应关系
    {} 字典
    [] list
    string "" str
    int/float int/float
    true/false True/False
    null None
  6.  
  7. json格式的语法规范
    最外层通常是一个字典或列表
    {} or []
    只要你想写一个json格式的数据 那么最外层直接写{}
    字符串必须是双引号
    你可以在里面套任意多的层次
  8.  
  9. json模块的核心功能
    dump
    dumps
    load
    loads
    不带s 封装write read
  1. 例子:
  1. 1.序列化 dump
    mydic = {"users": [{ "name": "agon", "age": 68 }, { "name": "agon", "age": 68}]}
    # with open("b.json","wt",encoding="utf-8") as f:
    # f.write(json.dumps(mydic))
    # with open("b.json", "wt", encoding="utf-8") as f:
    # json.dump(mydic, f)
  2.  
  3. 2. 反序列化 load
    # with open("a.json","rt",encoding="utf-8") as f:
    # res = json.loads(f.read())
    # print(type(res))
    # with open("a.json",encoding="utf-8") as f:
    # print(json.load(f))

  1.       xml 模块
    XML 可扩展的标记语言
  1. <></>
    也是一种通用的数据格式
    之所用用它也是因为跨平台
  2. 学习的重点还是语法格式
    一、任何的起始标签都必须有⼀一个结束标签。
    <> </>
    二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标
    签。这种语法是在⼤于符号之前紧跟一个斜线(/),XML
    解析器会将其翻译成<百度百科词条></百度百科词条>。
    例例如<百度百科词条/>。
  3. 三、标签必须按合适的顺序进⾏行行嵌套,所以结束标签必须按镜像顺序匹配
    起始标签。这好⽐比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有
    的内部括号之前,是不不能关闭外⾯面的括号的。
    四、所有的特性都必须有值。
    五、所有的特性都必须在值的周围加上双引号。
  4. 一个标签的组成部分
    <tagename 属性名称="属性值">文本内容</tagname>
  5. 单标签的写法
    <tagename 属性名称="属性值"/>
  6. # 镜像关闭顺序实例
    <a>
    <b>
    <c>
    </c>
    </b>
    </a>
  1. 例子:
  1. import xml.etree.ElementTree as ElementTree
    # 解析d.xml
    tree = ElementTree.parse("d.xml")
    print(tree)
    # 获取根标签
    rootTree = tree.getroot()
  2.  
  3. # 三种获取标签的方式
    # 获取所有人的年龄 iter是用于在全文范围获取标签
    # for item in rootTree.iter("age"):
    # # 一个标签三个组成部分
    # print(item.tag) # 标签名称
    # print(item.attrib) # 标签的属性
    # print(item.text) # 文本内容
  4.  
  5. # 第二种 从当前标签的子标签中找到一个名称为age的标签 如果有多个 找到的是第一个
    # print(rootTree.find("age").attrib)
    # 第三种 从当前标签的子标签中找到所有名称为age的标签
    # print(rootTree.findall("age"))
  6.  
  7. # 获取单个属性
    stu = rootTree.find("stu")
    print(stu.get("age"))
    print(stu.get("name"))
  8.  
  9. # 删除子标签
    rootTree.remove(stu)
  10.  
  11. # 添加子标签
    # 要先创建一个子标签
    newTag = ElementTree.Element("这是新标签",{"一个属性":"值"})
    rootTree.append(newTag)
  12.  
  13. # 写入文件
    tree.write("f.xml",encoding="utf-8")
  1.  
  2.     configparser模块
  1. config parser
    用于解析配置文件的模块
    何为配置文件
    包含配置程序信息的文件就称为配置文件
    什么样的数据应作为配置信息
    需要改 但是不经常改的信息 例如数据文件的路径 DB_PATH
  2.  
  3. 配置文件中 只有两种内容
    一种是section 分区
    一种是option 选项 就是一个key=value形式
  4.  
  5. 我们用的最多的就是get功能 用来从配置文件获取一个配置选项
    例子:
  1. import configparser
    # 创建一个解析器
    config = configparser.ConfigParser()
    # 读取并解析test.cfg
    config.read("test.cfg",encoding="utf-8")
    # 获取需要的信息
    # 获取所有分区
    # print(config.sections())
    # 获取所有选项
    # print(config.options("user"))
    # 获取某个选项的值
    # print(config.get("path","DB_PATH"))
    # print(type(config.get("user","age")))
    #
    # # get返回的都是字符串类型 如果需要转换类型 直接使用get+对应的类型(bool int float)
    # print(type(config.getint("user","age")))
    # print(type(config.get("user","age")))
  2.  
  3. # 判断是否有某个选项
    # config.has_option()
    # 判断是否有某个分区
    # config.has_section()
  1. # 添加
    # config.add_section("server")
    # config.set("server","url","192.168.1.2")
    # 删除
    # config.remove_option("user","age")
    # 修改
    # config.set("server","url","192.168.1.2")
  2.  
  3. # 写回文件中
    # with open("test.cfg", "wt", encoding="utf-8") as f:
    # config.write(f)
  1.  
  1. 补充 configparser
  1. import configparser
    jie = configparser.ConfigParser()
    jie.read('configparser.ini',encoding='utf-8')
    # print(jie.sections())
    print(jie.options('user1'))
    print(jie.get('user1','name1'))
    # jie.add_section('user5') # 添加[目录]
    jie.set("user3","name3",'jun') #添加/或等于重新修改 [目录下] 的小目录和对面的值
    jie.remove_section('user3') # 将[某一个目录] 删除
    jie.remove_option('user3','name') # 将[目录选项] 下面的 小选项 删除
  2.  
  3. with open('configparser.ini','wt',encoding='utf-8') as f:
    jie.write(f) # 最后要重新把内存中的数据写入文件覆盖掉
  1.  

Python开课复习-10/17的更多相关文章

  1. Python开课复习-10/16

    import random # random 随机数模块 # print(random.random()) #----float 大于0且小于1之间的小数# print(random.choice([ ...

  2. Python开课复习-10/15

    #----------模块关键-------------------------------# if __name__=='__main__': # if 这个文件中加入这行代码# func1() # ...

  3. Python开课复习-10/10

    1. 什么时匿名函数def 定义 的是有名函数:特点是可以通过名字重复调用 def func(): #func = 函数的内存地址 pass匿名函数就是没有名字的函数:特点是只能在定义时使用一次 2. ...

  4. Python开课复习10

    # 储备知识:# 函数的使用应该分为两个明确的阶段# 1. 定义阶段:只检测语法,不执行函数体代码def func(): print('from func')# 2. 调用阶段:会触发函数体代码的执行 ...

  5. Python开课复习9-28

    一.什么是迭代器#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 举例: l=[1,2,3] count=0 while co ...

  6. Python开课复习7

    操作系统 操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来. #1. 打开文 ...

  7. Python并发复习1 - 多线程

    一.基本概念 程序: 指令集,静态, 进程: 当程序运行时,会创建进程,是操作系统资源分配的基本单位 线程: 进程的基本执行单元,每个进程至少包含一个线程,是任务调度和执行的基本单位 > 进程和 ...

  8. Python web前端 10 bootstrp

    Python web前端 10 bootstrp 1.媒体查询 <style> *{ margin: 0; padding: 0; } div{ width: 110px; height: ...

  9. 万门大学Python零基础10天进阶班视频教程

    点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...

随机推荐

  1. JAVA去重

    JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 ...

  2. PAT L2-013 红色警报(并查集求连通子图)

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  3. privilege instruction error

    检查新建的回调函数是否用了__stdcall修饰

  4. Delphi:MSBuild编译dproj工程

    Delphi之命令行编译工程,传统是用dcc32来编译的,它需要设置一大堆参数. 自Delphi 2007以后,支持MSBuild编译,它直接编译.dproj工程文件,所有编译需要的东西,都已在其中设 ...

  5. 【centos】centos命令总结(持续更新)

    1.查看系统版本命令 转自:https://blog.csdn.net/networken/article/details/79771212 .查看内核版本 [root@localhost ~]# u ...

  6. C++ 单例模式(懒汉、饿汉模式)

    1.简单的单例模式实现 2.C++的构造函数不是线程安全的,所以上述代码在多线程的情况下是不安全的,原因是new Singelton时,这句话不是原子的,比如一个线程执行了new的同时,另一个线程对i ...

  7. 关于Laravel框架

    第1讲-Laravel介绍 1.1 什么是Laravel laravel是目前一个比较主流的框架,现在很多互联网的公司都在使用该框架.该框架的前身是symfony框架 Laravel的定位就是做一个简 ...

  8. coding利用Webhook实现Push代码后的jenkins自动构建

    安装jenkins 篇:http://www.cnblogs.com/loveyouyou616/p/8714544.html 之前部署了持续集成工具jenkins.通常是开发后的代码先推到 远程代码 ...

  9. 简述 OAuth 2.0 的运作流程(转)

    原文地址:http://www.barretlee.com/blog/2016/01/10/oauth2-introduce/ 本文将以用户使用 github 登录网站留言为例,简述 OAuth 2. ...

  10. 当前的开源SLAM方案

    开源方案 传感器形式 地址链接 MonoSLAM 单目 https://github.com/hanmekim/SceneLib2  PTAM 单目  http://www.robots.ox.ac. ...