标签:ott 嵌套 python学习 Shelve模块 getchild load 代码 ati 形式
什么是序列块?
指的是内存中的数据结构转化为中间格式,并存储到硬盘中
反序列化:将硬盘上存储的中间格式数据,在还原为内存中的数据
为什么要序列化?
? 就是为了将数据永久存储,之前学过的文件也能完成持久化存储,但是操作起来非常麻烦
? pickle.dump: 序列化
? pickle.load: 反序列化
? pickle.dumps: 序列化
? pickle.loads: 反序列化
? # dump vs dumps load vs loads
? 带s的是帮你封装了write & read 功能,使用更加方便
eg1:将 name=‘agon‘ ,password=‘123‘, sex= ‘female‘ 存储到文件中
方式一:
import pickle
user={‘name‘:‘agon‘,‘password‘:‘123,‘gender‘:‘female‘}
with open(‘userdb.txt‘,‘wt‘,encoding=‘utf-8‘) as f:
userbytes=pickle.dumps(user)
f.write(userbytes)
方式二:
import pickle
user={‘name‘:‘agon‘,‘password‘:‘123,‘gender‘:‘female‘}
with open(‘userdb.txt‘,‘wt‘,encoding=‘utf-8‘) as f:
pickle.dump(user,f)
eg2:将file ‘userdb.txt‘ 从文件中反序列出来
方式一:
import pickle
with open(‘userdb.txt‘,‘rt‘,encoding=‘utf-8‘) as f:
userbytes=f.read()
user=pickle.loads(userbytes)
方式二:
import pickle
with open(‘userdb.txt‘,‘rt‘,encoding=‘utf-8‘) as f:
user=pickle.load(f)
总结:
pickle就是一种序列化的模块,只有python能够解析
? shelve模块,也可用于序列化,与pickle不同之处在于:
? 1.不需要关心文件的模式是什么,直接把他当陈过一个dict来看
? 2.可以直接对数据进行修改,而不用覆盖原来的数据
? 3.pickle 修改数据的化,只能用wb模式来覆盖,而且只能读到第一次读入的数据
序列化:
import shelve
user={‘name‘:‘agon‘}
s=shelve.open(‘userdb.shv‘)
s[‘user‘]=user
s.close
反序列化
import shelve
s=shelve.open(‘userdb.shv‘.writeback=True)
print(s[‘user‘])
s.close
? 之前有讲到的pickle & shelve模块序列化后得到的数据,只有python才能解析,但是通常企业
开发不可能做一个单机程序,都需要联网进行计算机建的交互,我们必须保证这数据能够跨平台使
用。
? json (java script object notation) java脚本对象表示法。
? 对于开发而言,json就是一种通用的数据格式,任何一种语言都能解析。
? json中的数据类型:
json | python |
---|---|
{} | dict |
[] | list |
string " " | str ‘ ‘ |
int/float | int/float |
true/false | True/ False |
null | None |
json 不支持set和duple
? json的语法规范:
? 1.最外层必须是 { } or [ ],最外层用{}较多
? 2.string必须是双引号 “ ”
eg:json数据格式
? {
? “user":[{"name":"agon"},{"name":"aaa"}]
}
json模块的核心功能
? json.dump 序列化
? json.dumps 序列化
? json.load 反序列化
? json.load 反序列化
? #和pickle一样,带s的是帮你封装了write & read 功能,使用更加方便
eg1:将json数据mydic={”user":[{"name":"agon"},{"name":"aaa"}]} 序列化
方式一:
import json
mydic={”user":[{"name":"agon"},{"name":"aaa"}]}
with open(‘b.json‘,‘wt‘,encoding=‘utf-8‘) as f:
res=json.dumps(mydic)
f.write(res)
方式二:
import json
mydic={”user":[{"name":"agon"},{"name":"aaa"}]}
with open(‘b.json‘,‘wt‘,encoding=‘utf-8‘) as f:
json.dump(mydic,f)
eg2:将文件中的json数据反序列化
方式一:
import json
with open(‘b.json‘,‘rt‘,encoding=‘utf-8‘) as f:
readbytes=f.read()
json.loads(readbytes)
方式二:
import json
with open(‘b.json‘,‘rt‘,encoding=‘utf-8‘) as f:
json.load(f)
总结:
? json就是一种数据格式,能被任何语言识别
xml (Extensible markup language) 可扩展的标记语言
也是一种通用的数据格式,可以跨平台
? xml的语法规范:
? 1.一个标签: < name/>
? 2.两个标签:< name> < /name>
? 3.任何的其实标签都有一个结束标签。
? 4.标签必须是按合适的顺序进行嵌套,所以结束标签中同时表示其实和结束i拗钱。这种语
? 法是再大于符号(/),例如<百度百科词条/>。XML解析器会将其翻译成<百度百科词条
? >。
? 5.所有的特性都必须有值。
? 6.所有的特性都必须再值的周围嘉善过一个双引号。
import xml.etree.ElementTree as ElementTree #表示节点树
# 解析 d.xml
tree = ElmentTree.parse(‘d.xml‘)
# 获取根标签
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 = Element.Tree.Element(‘this is new tag‘,{‘attrib‘:‘value‘})
rootTree.append(newTag)
#写入文件
tree.write(‘f.xml‘,encoding=‘utf-8‘)
总结:
? Element常用方法
? getchildren() 获取所有子标签
? find 从子标签中获取名字匹配的第一个子标签
? findall 从子标签中获取匹配名字的所有子标签
? iter 从子全文中获取名字匹配的所有标签,返回迭代器
? get 获取指定属性的值
? append 添加子标签
? remove 删除子标签
? elementTree常用方法
? parse 文本文件转对象
? dump 对象转文本
? write 写入
? getroot 获取根标签
? 配置文件解析模块
? 运行程序是一些参数需要用户来决定,这些参数称之为配置信息,配置信息通常就放在一
? 个文件中
? 为什么要配置文件?
? 一些parameter我们不再code中写死,这样扩展性太低,修改需求时必须修改源代码,太
? 麻烦
? 配置文件主要内容
? section 分区
? option 选项,就是一个key=value形式
? 常用功能
? get 用来从配置文件中获取一个配置选项
? read
? set
? sections
? options
import configparser
# 创建一个解析器
config = confingparser.ConfigParser()
#读取并解析test.cfg
config.read(‘test.cfg‘,encoding=‘utf-8‘)
# 获取需要的信息:
# 获取所有分区
print(config.sections())
# 获取所有选项
print(config.options(‘user‘))
# 获取某个选项的值
print(config.get(‘path‘,‘DB_PATH))
# get返回的都是字符串类型,如果需要转换类型,直接用get+对应的类型(bool,int,float)
print(config.getint(‘user‘,‘age‘))
print(config.get(‘user‘,‘age‘))
#是否有某个选项
config.has_option()
#是否有某个分区
config.has_section()
总结:
? 配置文件是非常常用的程序扩展方法,其实使用起来非常简单
?
标签:ott 嵌套 python学习 Shelve模块 getchild load 代码 ati 形式
原文地址:https://www.cnblogs.com/hello-yuanjing/p/9807127.html