"""
pickle 和 shevle 序列化后得到的数据 只有python才能解析
通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互
我们必须保证这个数据 能够跨平台使用 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 load
dumps loads
不带s 封装write 和 read
""" import json
users = {'name':"音乐会","age":20,"hobbies":("music","movies")}
# res1= json.dumps(users)
# print(res1)
# res=json.dump(users,open("users.json","wt",encoding="utf-8"))
# print(res) # json的反序列化
# jsonstr = json.load(open("users.json","r",encoding="utf-8"))
# print(jsonstr,type(jsonstr))
#
# with open("users.json","rt",encoding="utf-8") as f:
# jsonstr1 = json.loads(f.read())
# print(jsonstr1,type(jsonstr1)) 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)
# ================================== '''
pickle
一种python独有的序列化方式
支持python中所有的类型
dump load
dumps loads
'''
# ====================================
'''
shelve
一种python独有的序列化方式 进行了进一步封装 只有一个open函数
得到一个shevle对象后 直接把它当成一个字典 通过key来存取 它于pickle不同之处在于 不需要关心文件模式什么的 直接把它当成一个字典来看待
它可以直接对数据进行修改 而不用覆盖原来的数据
而pickle 你想要修改只能 用wb模式来覆盖
'''
import shelve
# user = {"name":"高根"}
# s = shelve-egon.open("userdb.shv")
# s["user"] = user
# s.close() # s = shelve.open("userdb.shv",writeback=True)
# print(s["user"])
# s["user"]["age"] = 20
# s.close() # ==============================
''' 与json的区别
XML相比较 更加重量级(贬义词) 同样的数据 xml格式占用更多空间
最要命 解析非常麻烦 你需要知道xml到底是什么结构
更多的是编写(照着模板填空) 解析的工作 通常框架已经做好了 XML
什么XML:全称 可扩展标记语言
标记指的是代表某种含义的字符 XML<>
为什么需要XML
为能够在不同的平台间继续数据的交换
为了使交换的数据能让对方看懂 就需要按照一定的语法规范来书写
XML语法格式:
一、任何的起始标签都必须有一个结束标签。
<tagname></tagname>
<tagname></tagname>
<tagname/> 简化写法
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。
这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。
XML解析器会将其翻译成<百度百科词条></百度百科词条>。 三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如这是一串百度百科中的样例字符串。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
<tag1>
<tag2>
<tag3>
</tag3>
</tag2>
</tag1> 大白话 关闭标签应该从内往外 一层一层关闭 顺序不能乱
四、所有的特性都必须有值。
特性指的是属性
<person name="">
</person>
五、所有的特性都必须在值的周围加上双引号。 注意:最外层有且只有一个标签 这个标签称之为根标签
第一行应该有文档声明 用于高速计算机怎么理解
例如:<?xml version="1.0" encoding="utf-8"?>
当标签嵌套的时候会出现层级关系 如果一个标签不被任何别的标签包裹 那他就是根标签(最外层)
使用场景:
1.配置文件
2.常规的数据交换 例如从服务器获取一段新闻 与json的区别:
作用是一样的 都是一种数据格式
xml比json先诞生
json的数据比xml小
目前json是主流 python中的xml处理
使用到的模块
ElmentTree 表示整个文件的元素树 Elment 表示一个节点
属性
1.text 开始标签和结束标签中间的文本
2.attrib 所有的属性 字典类型
3.tag 标签的名字
方法
get 获取某个属性的值
1.解析XML
查找标签
find 在子标签中获取名字匹配第一个
findall 在子标签中获取名字匹配的所有标签
iter(tagname) 在全文中查找[匹配的所有标签 返回一个迭代器
2.生成XML
用ElmentTree
parse() 解析一个文件
getroot() 获取根标签
write() 写入到文件
3.修改xml
set 一个属性
remove 一个标签
append 一个标签
''' import xml.etree.ElementTree as ElementTree
# 解析d.xml-egon
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") """
用代码生成一个xml文档 import xml.etree.ElementTree as et
# 创建根标签
root = et.Element("root")
# 创建节点树
t1 = et.ElementTree(root) # 加一个peron标签
persson = et.Element("person")
persson.attrib["name"] = "yyh"
persson.attrib["sex"] = "man"
persson.attrib["age"] = "20"
persson.text = "这是一个person标签" root.append(persson) # 写入文件
t1.write("newXML.xml",encoding="utf-8",xml_declaration=True)
""" # ===============================
'''
configparser
configparser 是什么? 配置文件解析模块
什么是配置文件?
用于提供程序运行所需要的一些信息的文件 后缀 ini cfg
配置信息 通常是 需要更改但是不需要经常改的值
有什么用?
方便用户修改 例如超时时间 配置文件内容格式
只包括两种元素
section 分区
option 选项
一个文件可以有多个section
一个section可以有多个选项 核心功能
1.sections 获取所有分区
2.options 获取所有选项
3.get 获取一个值 传入 section option 注意:大小写不敏感 常用功能:
read 读取一个配置文件
write 写入到文件中
get 获取某个分区下 某个选项的值 set 修改 或增加选项
remove_section 删除分区
remove_option 删除选项
add_section 添加分区
'''
# 假装做一个下载功能 最大链接速度可以由用户来控制 用户不会看代码 所以提供一个配置文件
import configparser
# 得到配置文件对象
cfg = configparser.ConfigParser()
# 读取一个配置文件
cfg.read("download.ini") # 获取需要的信息
# 获取所有分区
# print(cfg.sections())
# 获取所有选项
# print(cfg.options("section1")) # 获取某个选项的值
# print(type(cfg.get("section1","maxspeed")))
# get返回的都是字符串类型
# 如果需要转换类型 直接使用get+对应的类型(bool int float)
# print(type(cfg.getint("section1","maxspeed")))
# print(cfg.getint("section2","minspeed")) # 是否由某个选项
# 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)

PYTHON-模块 json pickle shelve xml的更多相关文章

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

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

  2. 常用模块(json/pickle/shelve/XML)

    一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将 ...

  3. 模块 - json/pickle/shelve/xml/configparser

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 为什么要序列化: 有种办法可以直接把内存数据(eg:10个列表,3 ...

  4. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  5. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  6. Python学习笔记——基础篇【第六周】——json & pickle & shelve & xml处理模块

    json & pickle 模块(序列化) json和pickle都是序列化内存数据到文件 json和pickle的区别是: json是所有语言通用的,但是只能序列化最基本的数据类型(字符串. ...

  7. python 序列化及其相关模块(json,pickle,shelve,xml)详解

    什么是序列化对象? 我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatter ...

  8. Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)

    由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过, ...

  9. Python day19 模块介绍3(sys,json,pickle,shelve,xml)

    1.sys模块 import sys sys.path()#打印系统path sys.version()#解释程序版本信息 sys.platform()#系统平台 sys.exit(0)#退出程序 c ...

  10. python笔记-7(shutil/json/pickle/shelve/xml/configparser/hashlib模块)

    一.shutil模块--高级的文件.文件夹.压缩包处理模块 1.通过句柄复制内容 shutil.copyfileobj(f1,f2)对文件的复制(通过句柄fdst/fsrc复制文件内容) 源码: Le ...

随机推荐

  1. poj 3683(2-SAT+SCC)

    传送门:Problem 3683 https://www.cnblogs.com/violet-acmer/p/9769406.html 参考资料: [1]:挑战程序设计竞赛 题意: 有n场婚礼,每场 ...

  2. Excel:LOOKUP函数的经典用法

    1.逆向查询 下面这个表中,A:C列是员工基础信息表,分别是部门.姓名和职务. ​现在要根据E5单元格中的员工姓名,在这个信息表中查询属于哪个部门,也就是咱们常说的逆向查询,就可以使用LOOKUP函数 ...

  3. 泛型集合List(C#)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List ...

  4. GBDT

    一.决策树分类 决策树分为两大类,分类树和回归树 分类树用于分类标签值,如晴天/阴天/雾/雨.用户性别.网页是否是垃圾页面 回归树用于预测实数值,如明天的温度.用户的年龄 两者的区别: 分类树的结果不 ...

  5. Port Forwarding in Windows

    转自:http://woshub.com/port-forwarding-in-windows/ Since Windows XP there is a built-in ability in Mic ...

  6. python---memcache基本使用以及内部原理

    简单使用: import memcache mc = memcache.Client(['127.0.0.1:8081','127.0.0.1:8082','127.0.0.1:8083','127. ...

  7. Hbase记录-HBase客户端API

    本章介绍用于对HBase表上执行CRUD操作的HBase Java客户端API. HBase是用Java编写的,并具有Java原生API.因此,它提供了编程访问数据操纵语言(DML). HBaseCo ...

  8. mysql 缓存机制

    了解mysql缓存吗(顺丰) mysql缓存机制就是缓存sql 文本及缓存结果,用KV形式保存再服务器内存中,如果运行相同的sql,服务器直接从缓存中去获取结果,不需要在再去解析.优化.执行sql. ...

  9. Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

    使用JProfiler监控JAVA程序内存,JVM报错: A fatal error has been detected by the Java Runtime Environment: EXCEPT ...

  10. FastReport 套打全攻略

    http://blog.csdn.net/jinzhili/article/details/500263 FastReport 套打全攻略  2005-7-13 22:10  原创//以设计套打行为6 ...