分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

第二十天,pickle json xml shelve configparser模块

发布时间:2023-09-06 02:18责任编辑:胡小海关键词:jsjsonxml

今日内容

1.pcikle

  专用于python语言的序列化

2.json

  是一种跨平台的数据格式

  也属于序列化的一种方式

3.xml

  可拓展标记语言

  一种编写文档的语法 也支持跨平台

  比较json而言 属于重量级

4.shelve

  及其简单的序列化模块 只用于python

5 confiqparser

  配置文件解析模块

一 pickle

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

序列化是什么?

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

反序列化是什么?

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

为什么要学序列化?

就是为了将数据持久存储

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

pickle模块主要功能

dump   序列化

load  反序列化

dumps

loads

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

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

import pickle#用户注册后得到的数据name = ‘高跟‘’password = ‘123’height = 1.5hobby = [‘吃‘,‘喝’,‘赌’,‘飘’,{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 shelveuse = {‘name‘:‘高根‘}s = shelve.open(‘userdb.shv‘)s[‘user‘] = users.close()s = shelve.open(‘userdb.shv‘,writeback=True)print(s[‘user‘])s[‘user‘][‘user‘])s[‘user‘][‘age‘]=20s.close()

 三 jison模块(******)

  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)

练习

把news.json中的新闻数据 提取出来打印控制台

import jsonwith open("news.json","rt",encoding="utf-8") as f: ???res = json.load(f) ???print(type(res)) ???for dic in res["result"]["data"]: ???????for key in dic: ???????????print("%s:%s" % (key, dic[key]))

四 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.xmltree = 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)

第二十天,pickle json xml shelve configparser模块

原文地址:https://www.cnblogs.com/gongcheng-/p/9807024.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved