热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PYTHON模块jsonpickleshelvexml

pickle和shevle序列化后得到的数据只有python才能解析通常企业开发不可能做一个单机程序都需要联网进行计算机间的交互我们必须保证这个数据能够跨平台使用JSON是什

"""
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语法格式:
一、任何的起始标签都必须有一个结束标签。


简化写法
二、可以采用另一种简化语法&#xff0c;可以在一个标签中同时表示起始和结束标签。
这种语法是在大于符号之前紧跟一个斜线&#xff08;/&#xff09;&#xff0c;例如<百度百科词条/>。
XML解析器会将其翻译成<百度百科词条>

三、标签必须按合适的顺序进行嵌套&#xff0c;所以结束标签必须按镜像顺序匹配起始标签&#xff0c;例如这是一串百度百科中的样例字符串。这好比是将起始和结束标签看作是数学中的左右括号&#xff1a;在没有关闭所有的内部括号之前&#xff0c;是不能关闭外面的括号的。





大白话 关闭标签应该从内往外 一层一层关闭 顺序不能乱
四、所有的特性都必须有值。
特性指的是属性


五、所有的特性都必须在值的周围加上双引号。


注意:最外层有且只有一个标签 这个标签称之为根标签
第一行应该有文档声明 用于高速计算机怎么理解
例如:
当标签嵌套的时候会出现层级关系 如果一个标签不被任何别的标签包裹 那他就是根标签(最外层)
使用场景:
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 一个标签
&#39;&#39;&#39;

import xml.etree.ElementTree as ElementTree
# 解析d.xml-egon
tree &#61; ElementTree.parse("d.xml")
# print(tree)
# 获取根标签
rootTree &#61; 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 &#61; rootTree.find("stu")
# print(stu.get("age"))
# print(stu.get("name"))

# 删除子标签
# rootTree.remove(stu)


# 添加子标签
# 要先创建一个子标签
# newTag &#61; ElementTree.Element("这是新标签",{"一个属性":"值"})
# rootTree.append(newTag)

# 写入文件
# tree.write("f.xml",encoding&#61;"utf-8")

"""
用代码生成一个xml文档


import xml.etree.ElementTree as et
# 创建根标签
root &#61; et.Element("root")
# 创建节点树
t1 &#61; et.ElementTree(root)

# 加一个peron标签
persson &#61; et.Element("person")
persson.attrib["name"] &#61; "yyh"
persson.attrib["sex"] &#61; "man"
persson.attrib["age"] &#61; "20"
persson.text &#61; "这是一个person标签"

root.append(persson)

# 写入文件
t1.write("newXML.xml",encoding&#61;"utf-8",xml_declaration&#61;True)
"""

# &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
&#39;&#39;&#39;
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 添加分区
&#39;&#39;&#39;
# 假装做一个下载功能 最大链接速度可以由用户来控制 用户不会看代码 所以提供一个配置文件
import configparser
# 得到配置文件对象
cfg &#61; configparser.ConfigParser()
# 读取一个配置文件
cfg.read("download.ini")

# 获取需要的信息
# 获取所有分区
# print(cfg.sections())
# 获取所有选项
# print(cfg.options("section1"))

# 获取某个选项的值
# print(type(cfg.get("section1","maxspeed")))
# get返回的都是字符串类型
# 如果需要转换类型 直接使用get&#43;对应的类型(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&#61;"utf-8") as f:
# config.write(f)





转:https://www.cnblogs.com/du-jun/p/9812858.html



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
Lucky_Leeing
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有