pickle是一个用来序列化的模块
序列化是什么?
指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上 反序列化?
将硬盘上存储的中间格式数据在还原为内存中的数据结构 为什么要序列化?
就是为了将数据持久存储
之前学过的文件也能完成持久化存储 但是操作起来非常麻烦 pickle模块主要功能
dump
load
dumps
loads
dump是序列化
load反序列化
不带s的是帮你封装write read 更方便 load函数可以多次执行 每次load 都是往后在读一个对象 如果没有了就抛出异常Ran out of input
# pickle支持python中所有的数据类型
user = {"name":name,"password":password,"height":height,"hobby":hobby,"test":3} # 序列化的过程
# with open("userdb.pkl","ab") as f:
# userbytes = pickle.dumps(user)
# f.write(userbytes) # 反序列化过程
# with open("userdb.pkl","rb") as f:
# userbytes = f.read()
# user = pickle.loads(userbytes)
# print(user)
# print(type(user))
# #dump 直接序列化到文件
# with open("userdb.pkl","ab") as f:
# pickle.dump(user,f) # #load 从文件反序列化
with open("userdb.pkl","rb") as f:
user = pickle.load(f)
print(user)
shelve模块 也用于序列化
它于pickle不同之处在于 不需要关心文件模式什么的 直接把它当成一个字典来看待
它可以直接对数据进行修改 而不用覆盖原来的数据
而pickle 你想要修改只能 用wb模式来覆盖
例子:
import shelve
# user = {"name":"军"}
# s = shelve.open("userdb.shv")
# s["user"] = user
# s.close() s = shelve.open("userdb.shv",writeback=True)
print(s["user"])
s["user"]["age"] = 20 # 若要修改数值 上面需要把writeback修改为Ture 默认不需要添加
s.close()

            json模块
pickle 和 shevle 序列化后得到的数据 只有python才能解析
通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互
我们必须保证这个数据 能够跨平台使用 JSON是什么? java script object notation 就是的对象表示法
var obj = {"name":"egon"}
对于我们开发而言 json就是一种通用的数据格式 任何语言都能解析 js 中的数据类型 python数据类型 的对应关系
{} 字典
[] list
string "" str
int/float int/float
true/false True/False
null None json格式的语法规范
最外层通常是一个字典或列表
{} or []
只要你想写一个json格式的数据 那么最外层直接写{}
字符串必须是双引号
你可以在里面套任意多的层次 json模块的核心功能
dump
dumps
load
loads
不带s 封装write 和 read
例子:
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. 反序列化 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))

      xml 模块
XML 可扩展的标记语言
<></>
也是一种通用的数据格式
之所用用它也是因为跨平台 学习的重点还是语法格式
一、任何的起始标签都必须有⼀一个结束标签。
<> </>
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标
签。这种语法是在⼤于符号之前紧跟一个斜线(/),XML
解析器会将其翻译成<百度百科词条></百度百科词条>。
例例如<百度百科词条/>。 三、标签必须按合适的顺序进⾏行行嵌套,所以结束标签必须按镜像顺序匹配
起始标签。这好⽐比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有
的内部括号之前,是不不能关闭外⾯面的括号的。
四、所有的特性都必须有值。
五、所有的特性都必须在值的周围加上双引号。 一个标签的组成部分
<tagename 属性名称="属性值">文本内容</tagname> 单标签的写法
<tagename 属性名称="属性值"/> # 镜像关闭顺序实例
<a>
<b>
<c>
</c>
</b>
</a>
例子:
import xml.etree.ElementTree as ElementTree
# 解析d.xml
tree = ElementTree.parse("d.xml")
print(tree)
# 获取根标签
rootTree = tree.getroot() # 三种获取标签的方式
# 获取所有人的年龄 iter是用于在全文范围获取标签
# for item in rootTree.iter("age"):
# # 一个标签三个组成部分
# print(item.tag) # 标签名称
# print(item.attrib) # 标签的属性
# print(item.text) # 文本内容 # 第二种 从当前标签的子标签中找到一个名称为age的标签 如果有多个 找到的是第一个
# print(rootTree.find("age").attrib)
# 第三种 从当前标签的子标签中找到所有名称为age的标签
# print(rootTree.findall("age")) # 获取单个属性
stu = rootTree.find("stu")
print(stu.get("age"))
print(stu.get("name")) # 删除子标签
rootTree.remove(stu) # 添加子标签
# 要先创建一个子标签
newTag = ElementTree.Element("这是新标签",{"一个属性":"值"})
rootTree.append(newTag) # 写入文件
tree.write("f.xml",encoding="utf-8")

    configparser模块
config  parser
用于解析配置文件的模块
何为配置文件
包含配置程序信息的文件就称为配置文件
什么样的数据应作为配置信息
需要改 但是不经常改的信息 例如数据文件的路径 DB_PATH 配置文件中 只有两种内容
一种是section 分区
一种是option 选项 就是一个key=value形式 我们用的最多的就是get功能 用来从配置文件获取一个配置选项
例子:
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"))) # 判断是否有某个选项
# config.has_option()
# 判断是否有某个分区
# config.has_section()
# 添加
# 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") # 写回文件中
# with open("test.cfg", "wt", encoding="utf-8") as f:
# config.write(f)

补充 configparser
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') # 将[目录选项] 下面的 小选项 删除 with open('configparser.ini','wt',encoding='utf-8') as f:
jie.write(f) # 最后要重新把内存中的数据写入文件覆盖掉
												

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. sql case 与 sum

    <select id="selectTotal" resultType="java.util.Map" parameterType="java. ...

  2. Java-分治算法

    一.分治算法的原理 分治算法就是将一个规模为N的问题分解成K个规模较小的子问题,这些子问题相互独立且与原问题性质相同,求出子问题的解,就可以得出原问题的解 二.分治算法的伪代码实现 合并算法Merge ...

  3. swift4.2 - UIDynamic

    1. SB放上俩 imageview,拖线成类属性 import UIKit class ViewController: UIViewController { @IBOutlet weak var b ...

  4. IOS开发之无法选择模拟器显示NO Scheme

    1. 不是 文件冲突的 看这个链接https://blog.csdn.net/sanpintian/article/details/7377365 2.文件冲突的  打开工程文件. 打开 直接 搜索 ...

  5. day 11 生成器

    生成器生成器本质就是迭代器,生成器是自己用python代码写的迭代器 将函数变成生成器yield用next 取值一个next,对应一个yield def func(): yield 111 yield ...

  6. Java09-java语法基础(八)java中的方法

    Java09-java语法基础(八)java中的方法 一.方法(函数/过程):是一个程序块,可以完成某种功能 1.java中方法的定义格式 [访问控制修饰符]  返回值类型  方法名(参数列表){ 方 ...

  7. 模块二 hashlib模块、configparser模块、logging模块

    算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常 ...

  8. vue 动态修改el-upload 的action

    action是一个必填参数,且其类型为string,我们把action写成:action,然后后面跟着一个方法名,调用方法,返回你想要的地址,代码示例: //html 代码 <el-upload ...

  9. maven项目打包发布到私有仓库

    在项目开发中通常会引用其他的jar,怎样把自己的项目做为一个jar包的形式发布到私服仓库中,主要有以下三个步骤 (怎样配置maven私服仓库,就不再这里说明了,可以参考以前的文章)1.在maven的s ...

  10. C# 一个数组未赋值引发的错误

    在电脑前又是一天,后来脑子也糊里糊涂,可能是基础还不牢固,设置断点,找了找问题才发现数组定义出了问题, 我是这样定义数组的,string[] auths ; string auths=new stri ...