今天学习了pickle模块,shelve模块,json模块,xml模块,configparser模块。
一、pickle模块:
pickle是一个用来序列化的模块
序列化是什么?
指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上
反序列化?
将硬盘上存储的中间格式数据再还原为内存中的数据结构
为什么要序列化?
就是为了将数据持久存储
之前学过的文件也能完成持久化存储 但是操作起来非常麻烦
例子:
import pickle
# 用户注册后得到的数据
name = '高跟'
password = '123'
height = 1.5
hobby = ['吃','喝','赌','飘',{1,2,3}]
with open('userdb.txt','wt',encoding = 'utf-8') as f:
text = '|'.join([name,password,str(height)])
f.write(text) 这是平时使用的文件写入
pickle支持python中所有的数据类型
user = {'name':name,'password':password,'height':height,'hobby':hobby,'test':3}
序列化的过程 dumps功能
with open('userdb.pkl','ab') as f:
userbytes = pickle.dumps(user)
f.write(userbytes)
反序列化过程 loads功能
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和json都需要与文件打交道
为了更加方便而推出的另一种序列化方式
怎么用
1、open
2、以key-value方式进行存取
3、close
例子:
import shelve
user = {'name':' 高跟'}
s = shelve.open('userdb.shv',writeback = True)
s['user'] = user
print(s['user'])
总结
可以存储python所有基础数据类型
只需要指定文件名字即可,使用方法与字典类型相同
其实该模块是对pickle模块的封装 使其更简单
三、json模块
pickle和shelve序列化后得到的数据 只有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
例子:
直接解析字符串的json为python对象
import json
jsontext = '''{
'users':[{
'name':'egon',
'age':68
},
{
'name':'hu老师',
'age',18
}]
}'''
res = json.loads(jsontext)
print(res)
mydic = {
'users':
[{
'name':'egon',
'age':68
},
{
'name':'hu老师',
'age',18
}]
}
with open('b.json','wt',encoding = 'utf-8') as f:
json.dump(mydic,f)
四、xml模块
什么是xml
是一种标记语言(计算机能识别的文本)
xml有什么用
制定了一种文本书写规范,使得计算机能够轻松识别这些数据 就和python一样
为什么不直接用python语言来进行传输,计算机识别起来太费劲(语法太多,变化太复杂)
所以需要一种更加简单的解决方案
xml语法标准
一、任何的起初标签都必须有一个结束标签
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。XML解析器会将其翻译成<百度百科词条></百度百科词条>。
三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签。这好比是将起始和结束标签看作是数字中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
四、所有的特性都必须有值。
五、所有的特性都必须在值的周围加上双引号。
总结:
xml是一种数据格式遵循一定书写规范,用于多个平台之间的数据交换,和json的作用是一样的。
python中的xml
学习重点
1、标签的组成
<tagname attributename = "value"> text<subtags/></tagname>
2、数据解析(拿到想要的数据)
3、代码生成xml文档
了解知识点
数据的修改
导入核心模块
import xml.etree.ElmentTree 表示节点树
数据解析
Elment核心成员
tag attrib text
常用方法
Elment
getchildren() 获取所有子标签
find 从子标签中获取名字匹配的第一个子标签
findall 从子标签中获取名字匹配的所有子标签
iter 从子全文中获取名字匹配的所有标签 返回迭代器
get 获取指定属性的值
append 增加子标签
remove 删除子标签
Elmenttree
parse 文本文件转对象
dump 对象转文本
write 写入
getroot 获取跟标签
生成xml
创建节点
添加内容
转为节点树
写入文件
五、configparser模块
配置文件解析模块
运行程序时一些参数需要用户来决定,这些参数称之为配置信息,配置信息通常就放在一个文件中
为什么要配置文件?
一些参数我们不能在代码中写死,这样扩展性太低,修改需求时必须修改源代码,太麻烦
例子:
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'))
#是否有某个选项
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:
cofig.write(f)
总结:配置文件是非常常用的程序扩展方法,其实使用起来非常简单