一、json模块(重点)

一种跨平台的数据格式

也属于序列化的一种方式

介绍模块之前,三个问题:

序列化是什么?

我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化。

反序列化又是什么?

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

为什么要序列化?

1、持久保持状态

2、跨平台数据的交互

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

但多数实际开发中 用dumps 和 loads 较多

import jsondic={'name':'alvin','age':23,'sex':'male'}
print(type(dic))#<class 'dict'>

j=json.dumps(dic)
print(type(j))#<class 'str'>
 f=open('序列化对象','w')
f.write(j)  #-------------------等价于json.dump(dic,f)
f.close()
#-----------------------------反序列化<br>
import json
f=open('序列化对象')
data=json.loads(f.read())#  等价于data=json.load(f)

两个eg:

jsontext = """{"users": [{"name": "agon","age": 68},{"name": "alex","age": 57}]
}"""

# res = json.loads(jsontext)
# print(res)

mydic = {"users": [{"name": "agon","age": 68},{"name": "alex","age": 57}]
}
# 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)

二、pickle模块

专用于python语言的序列化

pickle模块主要功能
dump
load
dumps
loads
dump是序列化
load反序列化
不带s的是帮你封装write read 更方便

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

eg:

import pickle
# 用户注册后得到的数据
name = "wwl"
password = "123"
height = 1.8
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}

序列化的过程

# 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))

Conclusion:

json vs pickle:

json:

优点:跨语言、体积小

缺点:只能支持int\str\list\tuple\dict

Pickle:

优点:专为python设计,支持python所有的数据类型

缺点:只能在python中使用,存储数据占空间大

三、shelve模块

shelve模块 也用于序列化

它于pickle不同之处在于 不需要关心文件模式什么的 直接把它当成一个字典来看待
它可以直接对数据进行修改 而不用覆盖原来的数据
而pickle 你想要修改只能 用wb模式来覆盖

 序列化

import shelvef = shelve.open('shelve_test')  # 打开一个文件names = ["alex", "rain", "test"]
info = {'name':'alex','age':22}f["names"] = names  # 持久化列表
f['info_dic'] = infof.close()

反序列化

import shelved = shelve.open('shelve_test',,writeback=True)  # 打开一个文件print(d['names'])
print(d['info_dic'])d['names'].append('wwl')d.close()#del d['test'] #还可以删除

四、XML模块 (可扩展的标记语言)

也是一种通用的数据格式
之所用用它也是因为跨平台

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

例如:

<?xml version="1.0"?>
<data><country name="Liechtenstein"><rank updated="yes">2</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank updated="yes">5</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank updated="yes">69</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country>
</data>

重点还是语法格式
一、任何的起始标签都必须有一个结束标签。
<> </>
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标
签。这种语法是在于符号之前紧跟一个斜线(/),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>

用法:

import xml.etree.ElementTree as ElementTree
# 解析d.xml
tree = 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")

练习:

import xml.etree.ElementTree as ElementTree
tree = ElementTree.parse("f.xml")rootTree = tree.getroot()
users = []
for item in rootTree.iter("stu"):user = item.attribprint(user)gitem = item.find("girlfriend")user["girlfriend"] = gitem.attribusers.append(user)
print(users)

Conclusion:

xml也是一种中间格式 也属于序列化方式之一
与json相比较
同样的数据 json会比xml 更小 效率更高
xml 需要根据文档结构 手动解析 而 json 直接转对象

转载于:https://www.cnblogs.com/wanlei/p/9812912.html

常用模块(json/pickle/shelve/XML)相关推荐

  1. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

  2. python常用模块:pickle、shelve、json、xml、configparser

    今日内容主要有: 一.pickle模块 二.shelve模块 三.json模块 四.json练习 五.xml模块 六.xml练习 七.configparser模块 一.pickle模块 #pickle ...

  3. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html 1 # dic = str({'1':'111'}) 2 # 3 # f ...

  4. python-22 eval json pickle shelve 之间差别

    1.eval:可以转化字符串,字典,元组,列表等一般类型,不能转化类,函数 2.json:可以转化一般类型外,还可转化函数,可以在任何语言间转化,转化为字符串,可以写入文本,故这个较常用.      ...

  5. json,pickle,shelve序列化和反序列化

    1.简介 ●  json:用于字符串 和 python简单数据类型(list,dict...)间进行转换:字符串<--->python简单数据类型 ●  pickle:用于python特有 ...

  6. python中常用的序列化模块_Python常用模块之pickle——对象序列化

    作用 对Python对象进行序列化,便于存储和传输 Python对象序列化成bytes类型 pickle.dumps(obj) 将Python对象转化为bytes类型 pickle.loads(str ...

  7. Python常用模块——目录

    Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...

  8. python常用模块: xml和shelve模块教程

    1.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金 ...

  9. Python全栈开发之路 【第六篇】:Python基础之常用模块

    本节内容 模块分类:好处:标准库:help("modules") 查看所有python自带模块列表第三方开源模块:自定义模块:模块调用: import modulefrom os ...

最新文章

  1. javascript推荐书籍
  2. CentOS7 systemctl的使用
  3. 网络营销——专业的站内、站外优化还是得靠专业网络营销公司
  4. grpc在java中使用
  5. UA MATH523A 实分析1 集合论基础7 一些度量空间基本概念
  6. JAVA--网络编程
  7. *PAT_B_1052_C++(20分)
  8. 通通玩blend美工(8)——动态绘制路径动画,画出个萌妹子~
  9. ASP.NET中的Cookie对象
  10. 云小课 | 不小心删除了数据库,除了跑路还能咋办?
  11. 基于C语言的软件,基于C语言的计算机软件编程分析
  12. 华为 会议室分配时间最长_解决方案—会议室预约多入口超融合
  13. 华为的薪酬福利与激励体系
  14. 远程控制办公室电脑在家远程连接办公室电脑进行办公
  15. linux+循环buffer,说说循环缓冲区(Ring Buffer)
  16. 直播的下个关键词会是“美好”吗?
  17. 计算机三级信息安全技术知识点总结(6)
  18. postgres 删除 shema
  19. 微信小程序,动态改变背景图片
  20. 台式计算机耳机有杂音怎么办,小编教你解决电脑耳机有噪音和杂音怎么办几个方法!...

热门文章

  1. python bytes 改值_python3 bytes 和 string转换
  2. 外卖小程序源码-带流量主-个人用户可接入
  3. 百度SEO工作室团队介绍HTML5源码
  4. laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
  5. java bmp转jpg,在java中将bmp转换为jpg
  6. android_secure写权限,如何在android中设置权限WRITE_SECURE_SETTINGS?
  7. PHP企业网站源码-稻草人PHP系统源码v1.0.3
  8. 看图说cnblogs-强大的SEO功能【有实例】
  9. JQuery中使用Ajax赋值给全局变量失败异常的解决方法,jqueryajax
  10. Linux/Ubuntu: 命令行任务(To-Do List)管理 task - A command line todo manager