一 pickle

pickle是一个用来序列化的模块

序列化是什么?

指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上

反序列化是什么?

将硬盘上存储的中间格式数据再还原为内存中的数据结构

为什么要学序列化?

就是为了将数据持久存储

之前学过的文件也能完成持久化存储 但是操作起来非常麻烦

pickle模块主要功能

dump   序列化

load  反序列化

dumps

loads

不带s得死帮你封装write read  更方便

load函数可以多次执行  每次load 都是往后再读一个对象 如果没有了就抛出异常Ran out of input

import pickle
#用户注册后得到的数据
name = '高跟‘’
password = ‘123’
height = 1.5
hobby = ['吃‘,‘喝’,‘赌’,‘飘’,{1,2,3}】

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)
print(pickle.load(f))
print(pickle.load(f))
print(pickle.load(f))

二 shelve模块

shelve 模块  也用于序列化

它于pickle 不同之处在于  不需要关心文件模式什么的 直接把它当成一个字典来看待

它可以直接对数据进行修改  而不用覆盖原来的数据

而pickle 你想要修改只能  用wb模式来覆盖

import shelve
use = {'name':'高根‘}
s = shelve.open('userdb.shv')
s['user'] = user
s.close() s = shelve.open('userdb.shv',writeback=True)
print(s['user'])
s['user']['user'])
s['user']['age']=20
s.close()

三 json模块(******)

  pickle 和 shevle 序列化后得到的数据 只有Python才能解析

  通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互

  我们必须保证这个数据 能够跨平台使用

  JSON是什么? jave script object notation 就是的对象表示法

  var obj = {"name":"egon")

  对于我们开发而言 json 就是一种通用的数据格式 任何语言都能解析

  js中的数据类型  Python数据类型

  {}        字典

  []        list

  string""      str""or''

  int/float      int/float

  true/false     True/False

  null         None

  json格式的语法规范  

  最外层通常是一个字典或者列表

  { }或[ ]

  只要你想写一个json格式的数据 那么最外层直接写()

  字符串必须是双引号

  可以再里面套任意多的层次

  json核心功能

  dump

  dumps

  load

  loads

  不带s 封装 write 和read

import json

# 反序列化
# 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)) # 直接解析字符串的json为python对象 jsontext = """{
"users": [{
"name": "agon",
"age": 68
},
{
"name": "agon",
"age": 68
}
]
}""" # res = json.loads(jsontext)
# print(res) 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) import json # dic = {"a": '理查德姑妈', "b": "找到你", "c": "看不见的客人"}
# with open("c.json","wt",encoding="utf-8") as f:
# f.write(json.dumps(dic))
# print(repr(s), type(s)) # with open("c.json","rt",encoding="utf-8") as f:
# # print(f.read())
# d = json.loads(f.read())
# print(d)

四 XML

XML 可扩展的标记语言
<></>
也是一种通用的数据格式
之所用用它也是因为跨平台

学习的重点还是语法格式
一、任何的起始标签都必须有⼀一个结束标签。
<> </>
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标
签。这种语法是在⼤于符号之前紧跟一个斜线(/),XML
解析器会将其翻译成<百度百科词条></百度百科词条>。
例例如<百度百科词条/>。

三、标签必须按合适的顺序进⾏行行嵌套,所以结束标签必须按镜像顺序匹配
起始标签。这好⽐比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有
的内部括号之前,是不不能关闭外⾯面的括号的。
四、所有的特性都必须有值。
五、所有的特性都必须在值的周围加上双引号。

一个标签的组成部分
<tagename 属性名称="属性值">文本内容
</tagname>

单标签的写法
<tagename 属性名称="属性值"/>

# 镜像关闭顺序实例
<a>
<b>
<c>
</c>
</b>
</a>

把你左右同学的信息写成xml
<studentinfo>
<张三>
<age>20</age>
<gender>man</gender>
</张三>
<李四>
<age>20</age>
<gender>man</gender>
</李四>
</studentinfo>

总结 xml也是一种中间格式 也属于序列化方式之一
与json相比较
同样的数据 json会比xml 更小 效率更高
xml 需要根据文档结构 手动解析 而json 直接转对象

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)

并在python中解析该文件 进行展示

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"))

第二十一天,pickle json xml shelve configparser模块的更多相关文章

  1. 序列化模块组 pickle,json , xml , shelve , configparser

    序列化是什么? 序列化指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上. 反序列化是什么? 将硬盘上存储的中间格式数据再还原为内存中的数据结构. 为什么要有序列化? 是为了将数据持久存储 较 ...

  2. python之shelve、xml、configparser模块

    一.shelve模块 shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型 import shelve ...

  3. xml和configparser模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 但至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过 ...

  4. json pickle xml shelve configparser

    json:# 是一种跨平台的数据格式 也属于序列化的一种方式pickle和shevle 序列化后得到的数据 只有python才可以解析通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互 J ...

  5. PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器

    1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...

  6. 常用模块xml,shelve,configparser,hashlib

    XML 什么XML:全称 可扩展标记语言 标记指的是代表某种含义的字符 XML<> 为什么需要XML 为能够在不同的平台间继续数据的交换 为了使交换的数据能让对方看懂 就需要按照一定的语法 ...

  7. python基础之 序列 pickle&json

    内容梗概: 1. 什么是序列化 2. pickle(重点) 3. shelve 4. json(重点) 5. configparser模块 1. 什么是序列化 在我们存储数据或者网络传输数据的时候. ...

  8. Learning-Python【20】:Python常用模块(3)—— shelve、pickle、json、xml、configparser

    什么是序列化/反序列化? 序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输,反序列化就是硬盘中或者网络中传来的一种数据格式转换成内存中数据结构 为什么要有序列化/反序列化? 1 ...

  9. 常用模块之 shutil,json,pickle,shelve,xml,configparser

    shutil 高级的文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中 import shutil shut ...

随机推荐

  1. [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志

    原文: Logging with ElasticSearch, Kibana, ASP.NET Core and Docker 一步一步指导您使用 ElasticSearch, Kibana, ASP ...

  2. 一、Xadmin------安装

    翻译:http://xadmin.readthedocs.io/en/docs-chinese 1.安装方法: 1)pip install django-xadmin 2)通过源文件安装,我是通过这种 ...

  3. Glad to see you! CodeForces - 810D (交互+二分)

    This is an interactive problem. In the output section below you will see the information about flush ...

  4. js变量以及其作用域

    一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...

  5. 每周分享之JS数组的使用

    数组,一堆数字归为一组,就是一个数组,一堆对象放在一个组里,也是一个数组,概念很容易懂,说白了就是一个有限集合. JS数组的语法无法两种,插入和移除(语法自行科普).用处挺常见的,既然数组是一个集合, ...

  6. python实现满二叉树递归循环

    一.二叉树介绍点这片文章 二叉树及题目介绍 例题: 有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下, 小球每次经过开关就会把它的状态置反,这个开关为关时,小球左跑,为开时右跑.现在 ...

  7. MySQL之优化

    当 MySQL 单表记录数过大时,增删改查性能都会急剧下降,本文会提供一些优化参考,大家可以参考以下步骤来优化. 一. 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻 ...

  8. [转帖]Linux分页机制之分页机制的演变--Linux内存管理(七)

    Linux分页机制之分页机制的演变--Linux内存管理(七) 2016年09月01日 20:01:31 JeanCheng 阅读数:4543 https://blog.csdn.net/gatiem ...

  9. CLOUD计算产品成本嵌套

    1.产品入库单入库的半成品A (无单价) 2.其他出库单上(共耗的)出库的半成品A(无单价) 不管在同车间还是不同车间内都是认定为嵌套的,所以可以计算2遍成本,第1遍不考虑嵌套,第2遍就能计算进去了.

  10. java之序列化

    详细内容 连接https://blog.csdn.net/qq_27093465/article/details/78544505 Java 之 Serializable 序列化和反序列化的概念,作用 ...