码迷,mamicode.com
首页 > 编程语言 > 详细

2018.10.17python学习第二十一天

时间:2018-10-17 22:14:35      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:ott   嵌套   python学习   Shelve模块   getchild   load   代码   ati   形式   

序列化

什么是序列块?

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

反序列化:将硬盘上存储的中间格式数据,在还原为内存中的数据

为什么要序列化?

? 就是为了将数据永久存储,之前学过的文件也能完成持久化存储,但是操作起来非常麻烦

pickle 模块

? 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 模块

? 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
json 模块

? 之前有讲到的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 模块

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 获取根标签

configparser 模块

? 配置文件解析模块

? 运行程序是一些参数需要用户来决定,这些参数称之为配置信息,配置信息通常就放在一

? 个文件中

? 为什么要配置文件?

? 一些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()                 
                 

总结:

? 配置文件是非常常用的程序扩展方法,其实使用起来非常简单

?

2018.10.17python学习第二十一天

标签:ott   嵌套   python学习   Shelve模块   getchild   load   代码   ati   形式   

原文地址:https://www.cnblogs.com/hello-yuanjing/p/9807127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!