第21天 常用模块二
2018-10-17 23:29
901 查看
介绍的模块
pickle shelve json xml
configparser
人生三问
序列化是什么
序列化就是将内存中数据格式转换成中间对象,存储到硬盘上面或者是传输到网络上面。 反序列化就是将硬盘或者网络中传输的中间对象转换成内存中数据格式的过程。
为什么要有序列化
1. 为了持久化存储文件
数据是为了使用的,当我们的电脑断电之后数据就丢失是一件让人无法忍受的事情,因此我们要存储文件,存储的
方式有两种,一种就是自己打开文件写入文件,一种就是使用模块给我们存储文件。
2. 为了跨平台进行交互
之前我们在写atm程序的时候,为了持久保存信息都是自己通过open打开文件,然后将我们自己的数据转换成字符串的形式
写入文件中,当我们需要的时候重新按照一定的格式翻译成我们想要的样子展现给我们。这样做不仅麻烦,而且跨平台性很差,因为
无论我们把数据传给谁,我们都要告诉对方我这个数据是怎么存储的,你要怎么去获取,可能对方就算是获取了你的数据,也不一定
用它的语言去得到想要的值,或者说需要花费很长的时间去解析你的数据才能真正得到想要的数据。
为了解决这样的问题,有了序列化。
一天,有一个人告诉大家,以后你们都不要随便的存储数据了,都按照我的格式来存储,也都按照我的格式来解析好了,因此
网络上就出现了各式各样的序列化操作方法。归根结底就是一种通用的标准来来存储数据,方便其他人进行解析的。
怎么使用序列化
序列化的方法有很多种,python中自带的有pickle, shelve模块,通用的模块有xml和json。接下来我来详细的
介绍一下怎么使用这几个模块。
模块一:pickel
方法1: dumps和loads
import pickle user = { 'name': 'alex', 'sex': 'male', 'age': 32 } # 序列化 将内存中的格式转换成字节流之后存储到文件中 with open('a.kle','wb') as f: f.write(pickle.dumps(user)) # 反序列化 将文件中的字节流读取到内存转换成想要的格式 with open('a.kle', 'rb') as f: res = pickle.loads(f.read()) print(res)
方法2: dump和load
# dump和load封装了文件的write和read方法 # 使得模块使用起来更加的方便 # 序列化 with open('a', 'wb') as f: pickle.dump(user, f) # 反序列化 with open('a', 'rb') as f: print(pickle.load(f))
模块二:shevel
import shelve # shelve只有一个open函数 # 打开文件,文件可以存在也可以不存在, f = shelve.open(r'shelve.txt', writeback=True) # 在关闭之前可读可写参数writeback=True代表的是否可以进行修改 # f['user'] = {'name': 'hu'} print(f['user']) f['user']['sex'] = 'male' f.close()
通用的模块
模块三:json
json是什么?
json是一种轻量级的数据交换语言。简单清晰的层次结构使得它更易于人们的阅读以及机器的解析。能够有效的提高网络传输速率。
''' js中的数据类型和python中数据类型的一一转换关系 js中的数据类型 python中的数据类型 {} dict [] list int/float int/float string""双引号 str true/false True/False null None json格式的语法规范: 最外层通常是一个字典或者列表 字符串要用双引号 你可以在里面套用任意多的层次 '''
方法一:dumps, loads
# 和pickle的使用方法是一样的,如果是dumps和loads要通过f.write和f.readfang方法辅助
import json user = { 'name': 'hu', 'sex': 'male', 'age': 123 } # 序列化 with open('a.json', 'wt', encoding='utf-8') as f: f.write(json.dumps(user)) # 反序列化 with open('a.json', 'rt', encoding='utf-8') as f: print(json.loads(f.read()))
方法二:dump, load
with open('a.json', 'wt', encoding='utf-8') as f: json.dump(user, f) with open('a.json', 'rt', encoding='utf-8') as f: print(json.load(f))
模块四:xml
xml是什么 xml是一种可扩展的标记语言,它制定了一种文本内容的书写规范,使得计算机能够很轻松的识别这些数据。用于多个平台之间
的数据交换。和json类似。 xml语法标准
1. xml的每一个标签必须有一个结束标签
2. 标签可以嵌套使用
3. 所有的属性必须有值
4. 所有的值必须是加上双引号
5. 一个标签中可以同时表示起始和结束标签 eg:<百度百科词条/>
eg:标签是由
<a>
<b name="hu">
<b/>
<a/>
''' xml.etree.ElementTree as ET tree = ET.parse('b.xml') root = tree.getroot() tree的方法: 步骤一:获得根标签 parse 解析一个xml文档获得一个对象 getroot 根据获得得对象获得当前xml文档的跟标签 步骤二:根据根标签找子标签 iter 全xml文档去寻找标签 find 找到当前层的一个标签 findall 找到当前层的所有标签 getchildren 获得当前标签的儿子标签 步骤三:找到子标签更改标签的内容: text 标签文本,必须是叶子节点 attrib 属性值 set() 设置属性 步骤四:删除该标签 remove 删除当前节点 步骤五:添加标签 创建节点: year2 = ET.Element('year2') # 设置节点的text year2.text = '新年' # 设置节点的属性 year2.attrib = {'updated': 'yes'} 步骤六:一系列操作完成之后写入文件: tree.write() ET.dump() 把xml对象转换成一个文本 '''
案例:
# 注释1 ; 注释2 [section1] k1 = v1 k2:v2 user=egon age=18 is_admin=true salary=31 [section2] k1 = v1conf.cfg
查看方法
# config = configparser.ConfigParser().read('conf.cfg', encoding='utf-8') config = configparser.ConfigParser() config.read('conf.cfg', encoding='utf-8') # 查 print(config.sections()) print(config.items('section1')) print(config.options('section1')) print(config.get('section1', 'k1')) print(config.getint('section1', 'age')) print(config.getfloat('section1', 'age')) # print(config.getboolean('section1', 'is_admin')) # 改 # config.remove_section('section2') # 删除的是整个分区 config.remove_option('section2', 'k1') print(config.has_section('section2')) print(config.has_option('section2', 'sje')) # config.add_section('egon') config.set('egon','name', 'egon') config.set('egon', 'age', '18') config.write(open('conf.cfg', 'w'))
相关文章推荐
- Python模块常用的几种安装方式
- SAP MM 模块常用的数据表
- Python中常用的模块--Log日志模块
- python常用模块初始
- google tag manager(GTM)常用的基础模块
- Python开发安装的一些常用模块
- 项目常用功能模块(1)-ztree查找节点
- Python#常用的模块和简单用法
- Ansible常用模块介绍
- 常用的python模块
- Python主要模块和常用方法简览
- python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法
- 常用数学模块
- python 学习笔记 os模块常用项
- 50个python常用模块
- Python3 数据处理常用模块
- nginx lua模块常用的指令
- Tkinter模块常用参数(python3)
- ansible的几个常用模块
- SAP MM模块常用事务代码