PYTHON-模块 json pickle shelve xml

"""    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 jsonusers = {'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语法格式:        1、任何的起始标签都必须有一个结束标签。            <tagname></tagname>            <tagname></tagname>            <tagname/>  简化写法    2、能够采用另外一种简化语法,能够在一个标签中同时表示起始和结束标签。            这种语法是在大于符号以前紧跟一个斜线(/),例如<百度百科词条/>。            XML解析器会将其翻译成<百度百科词条></百度百科词条>。    3、标签必须按合适的顺序进行嵌套,因此结束标签必须按镜像顺序匹配起始标签,例如这是一串百度百科中的样例字符串。这比如是将起始和结束标签看做是数学中的左右括号:在没有关闭全部的内部括号以前,是不能关闭外面的括号的。            <tag1>                <tag2>                    <tag3>                    </tag3>                </tag2>            </tag1>    大白话  关闭标签应该从内往外 一层一层关闭 顺序不能乱    4、全部的特性都必须有值。        特性指的是属性        <person name="">        </person>    5、全部的特性都必须在值的周围加上双引号。    注意:最外层有且只有一个标签 这个标签称之为根标签             第一行应该有文档声明 用于高速计算机怎么理解              例如:<?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-egontree = 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)"""# ==============================='''configparserconfigparser 是什么? 配置文件解析模块    什么是配置文件?            用于提供程序运行所须要的一些信息的文件   后缀 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)
相关文章
相关标签/搜索