zoukankan      html  css  js  c++  java
  • json pickle xml shelve configparser

    json:
    # 是一种跨平台的数据格式
    也属于序列化的一种方式
    pickle和shevle 序列化后得到的数据 只有python才可以解析
    通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互

    JSON是什么?java script object notation 就是对象的表示法
    var obj={"name":"egon"}
    对于我们开发而言 json就是v一种通用的数据格式 任何语言都能解析
    js 中的数据类型 python中的数据类型
    {} 字典
    [] list
    string "" str
    int/float int/float

    json格式的语法规范
    最外层必须是一个字典或列表
    {}or[]
    只要你想写一个json格式的数据 那么最外层常用字典{}
    字符串必须用“”来表示
    你可以在里面套用任意多的层次


    举例:
    反序列化
    loads:
    import json
    with open("a.json","rt",encoding="utf-8")as f:
    res=json.loads(f.read())
    print(res)

    load:
    with open("a.json","rt",encoding="utf-8")as f:
    print(json.load(f))

    直接解析字符串的json为python个格式
    jsontext="{"name":"egon"}"
    res=json.loads(jsontext)
    print(res)

    mydic={"name":"egon"}
    with open("b.json","wt",encoding="utf-8")
    f.write(json.dunps(mydic))

    with open("b.json","wt",encoding="utf-8")
    json.dunp(mydic, f))










    pickle:(一个用来序列化的模块)
    # 专用与python语言的序列化
    市场python中所有的数据格式
    序列化:将内存中的数据结构转化为一种中间格式 并存储到硬盘
    反序列:将硬盘上存储的中间格式数据在还原为内存中的数据结构
    为什么要序列化:就是为了将数据持久存储
    之前学过的文件也可以完成持久化存储 但是操作起来非常麻烦

    pickle模块的主要功能:
    dump:序列化
    load:反序列化
    不带s的是帮你封装write read 更方便
    load函数可以多次执行 每次load 都是往后再读一个对象 如果没
    有了就抛出异常

    举例:
    序列化过程:
    user={xx:xxx,xx:xxx...}
    with open('uu.txt','wb')as f:
    user=pickle.dumps(user)
    f.write(user)

    反序列过程:
    with open('uu.txt','rb')as f:
    user_dic=f.read()
    user=pickle.loads(user_dic)
    print(user)

    dump使用(直接序列化到文件)
    with open('xx.txt','wb')as f:
    pickle.dump(user,f)

    load从文件反序列化
    with open('xx.txt','wb')as f:
    user=pickle.load(f)
    print(user)












    xml(# 可扩展的标记语言)一种编写文档的语法 也支持跨平台
    <></>和</>
    也是一种通用的数据格式
    之所以用它也是因为跨平台
    比较json而言 属于重量级
    xml语法标准:
    1.任何的起始标签都必须有一个结束标签
    2.可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签.
    这种语法实在大于符号之前紧跟一个斜线(/),例如<百度百科/> ,xml解
    释器会将其翻译成<百度百科></百度百科>
    3.标签必须按照合适的孙旭进行嵌套,所以结束标签必须按镜像顺序匹配
    起始标签.这好比是将起始和结束标签看作是数学中的左右括号:在没有
    关闭所有的内部括号之前,是不能关闭外面的括号的.
    4.所有的特性都必须有值
    5.所有的特性都必须在值的周围加上双引号

    一个标签的组成部分;
    <tagename 属性名称="属性值">文本内容
    </tagename>
    单标签的写法:
    <tagename 属性名称="属性值">

    镜像关闭顺序实例:
    <a>
    <b>
    <name>man</name>
    </b>
    </a>


    解析一个xml实例:
    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.finddall("age"))

    # 获取单个属性
    stu=rootTree.find("stu")#找寻到标签stu
    print(stu.get("age"))#打印标签stu中的age的属性值

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

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

    # 写入文件
    tree.write("f.xml",encoding='utf-8')

    #取子标签中的属性值
    rootTree=tree.getroot()
    users=[]
    for item in rootTree.iter("stu"):
    user=item.attrib
    print(user)
    gitem=item.find("girlfriend")
    user["girlfriend"]=gitem.attrib
    users.append(user)
    print(users)












    shelve:
    # 极其简单的序列化模块 只用于python
    它用于序列化 不需要关心文件模式什么的 直接把它当成一个字典来看待
    它可以直接对数据进行修改 而不用覆盖原来的数据
    而pickle 你想要修改只能 用wb模式来覆盖
    import shelve
    user={xx:xxx}
    s=shelve.oopen('userdb.shv')
    s['user']=user
    s.close()

    反序列取
    s=sheelve.open('userdb.shv')
    print(s['user'])
    s.close()

    取的时候修改
    s=sheelve.open('userdb.shv',writeback=True)
    print(s['user'])
    s['user']['age']=20
    s.close()


    configparser(.cfg格式)
    配置文件解析模块
    config parser
    用于解析配置文件的模块
    何为配置文件:
    包含配置程序信息的文件就惩治为配置文件
    什么样的数据应该作为配置信息
    需要改 但是不经常改 例如数据文件的路径 DB_PATH
    配置文件中 只有两种内容
    一种是section 分区
    一种是option 选项 就是一个key=value形式
    我们用的最多的就是get功能 用来从配置文件获取一个配置选项

    #判断是否有某个选项:
    config.has_option()
    #是否有某个分区:
    config.has_section()

    举例aa.cfg下
    [path]
    DB_PATH=C://myfile/test.txt
    [user]
    name = 高根
    age = 20

    import configparser
    #创建一个解释器
    config=configparser.ConfigParser()
    #读取并解析aa.cfg
    config.read(aa.cfg,encouding="utf-8")
    #获取需要的信息
    #获取所有分区
    print(config.sections())
    #获取所有选项
    print(config.options("user"))
    #获取某个选项的值(默认是字符串)
    #getint getfloat getbool(可以直接转换类型)
    print(config.get("path","DN_PATH"))

    不太常用的
    1.添加
    config.add_section("server")
    2.删除
    config.remove_option("user","age")
    3.修改
    config.set("server","url","192.168.1.1")
    写回文件中
    with open("aa.cfg","wt",encoding="utf_8")as f:
    config.write(f)







  • 相关阅读:
    Nhibernate 3.0 cookbook学习笔记 配置与架构
    jQuery 三级联动选项栏
    依赖注入框架Autofac学习笔记
    Windows服务初探
    再记面试题
    Nhibernate 3.0 cookbook学习笔记 一对多与多对多映射
    Nhibernate 3.0 cookbook学习笔记 创建一个加密类
    2011 微软 MVP 全球大会即将拉开序幕
    Windows Shell扩展系列文章 2 .NET 4为扩展的Windows Shell上下文菜单项添加位图图标
    【转】微软一站式示例代码库(中文版)20110413版本, 新添加16个Sample
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9804971.html
Copyright © 2011-2022 走看看