zoukankan      html  css  js  c++  java
  • python全栈开发 * 24 知识点汇总 * 180705

    24 模块
    -------序列化
    一.什么是模块 模块:py文件就是一个模块.
    二.模块的分类:
    (1)内置模块 (登录模块,时间模块,sys模块,os模块)
    (2)扩展模块 (itchat 微信有关,爬虫,beautiful soup 网址(http://pypi.org)
    (3)自定义模块
    三.序列化模块及分类.
    1创造一个序列化字符串
    2.序列化模块分类
    (1).json 适用于不同语言之间,但可支持数据类型有限,str,int,list,dict,bool 作用:方便数据传输 .
    (2).pickle 只用于python语言之间的传输,可支持python所有的数据类型
    (3)shelve 只是python的一个小工具(文件方面)
    3.json 的用法
    (1).json的意义 a.数据通过网络发送给别人;
    b.写入文件也用到json
    (2)dumps,loads (将数据用于网络传输 ; 多个数据写入一个文件)
    网络传输:
    import json
    dic={"alex":["男","中国",1000]}
    ret=json.dumps(dic)
    ret1=json.dumps(dic,ensure_ascii=False)
    print(ret,type(ret)) # {"alex": ["u7537", "u4e2du56fd", 1000]} <class 'str'>
    print(ret1,type(ret1)) #{"alex": ["男", "中国", 1000]} <class 'str'>
    ret2=json.loads(ret)
    print(ret2,type(ret2)) # {'alex': ['男', '中国', 1000]} <class 'dict'>
    文件操作: 多个数据写入一个文件
    import json
    dic={"alex":["男","中国",1000]}
    l1=["包宝宝","包大宝宝","包小宝宝","包老宝宝","真的很好看"]
    dic1 = {"alex": ('women','women','老女人')}
    f=open("json1",encoding="utf-8",mode="w")
    s1=json.dumps(dic,ensure_ascii=False)
    f.write(s1+" ")
    s2=json.dumps(dic1,ensure_ascii=False)
    f.write(s2+" ")
    s3=json.dumps(l1,ensure_ascii=False)
    f.write(s3+" ")
    f.close() # 写文件
    f1=open("json1",encoding="utf-8") # 读文件
    for line in f1: #{'alex': ['男', '中国', 1000]} <class 'dict'>
    ret=json.loads(line) #{'alex': ['women', 'women', '老女人']} <class 'dict'>
    print(ret,type(ret)) # ['包宝宝', '包大宝宝', '包小宝宝', '包老宝宝', '真的很好看'] <class 'list'>

    (3)dump,load (单个数据写入一个文件)
    import json
    dict={'alex':["男",1000,"中国"]}
    f=open("json1",encoding="utf-8",mode="a")
    json.dump(dict,f,ensure_ascii=False) # 写文件
    f.close()
    f1=open("json1",encoding="utf-8") # 读文件
    ret=json.load(f1)
    print(ret,type(ret)) # {'alex': ['男', 1000, '中国']} <class 'dict'>
    (4).json的缺点,将数据写入文件时只能写一个,如果将多个序列化字符串写入文件,反序列化会出错.(dump.load)
    (5).json的其他参数
    sort_keys=True( 按首字母的ascii码的位置排序)
    ensure_ascii 显示中文
    indent=2 key 的缩进为2
    separators=(",",":") "," 键值对之间的分割符,":"键与值之间的分割符.
    (6).特别注意: 字典序列化为字符串,key 必须是字符串类型,数字会变为字符串.
    4.pickle 的用法
    (1)dumps loads 用于网络传输
    import pickle
    dic={"包宝宝":["包大宝宝","包小宝宝","包老宝宝","真的很好看"]}
    ret=pickle.dumps(dic)
    print(ret,type(ret)) # <class 'bytes'>
    ret2=pickle.loads(ret)
    print(ret2,type(ret2)) # {'包宝宝': ['包大宝宝', '包小宝宝', '包老宝宝', '真的很好看']} <class 'dict'>

    (2)dump load 文件操作
    单个数据写入一个文件:
    import pickle
    dic={"包宝宝":["包大宝宝","包小宝宝","包老宝宝","真的很好看"]}
    f=open("pickle",mode="wb")
    pickle.dump(dic,f)
    f.close()
    f1=open("pickle",mode="rb")
    ret=pickle.load(f1)
    print(ret,type(ret)) #{'包宝宝': ['包大宝宝', '包小宝宝', '包老宝宝', '真的很好看']} <class 'dict'>
    多个数据写入一个文件:
    import pickle
    dic={"包宝宝":["包大宝宝","包小宝宝","包老宝宝","真的很好看"]}
    dic1={'alex':["男",1000,"中国"]}
    dic2 = {"alex1": ('women','women','老女人')}
    f1=open("pickle1",mode="wb")
    pickle.dump(dic,f1)
    pickle.dump(dic1,f1)
    pickle.dump(dic2,f1)
    f1.close()
    f2=open("pickle1",mode="rb")
    # print(pickle.load(f2)) # {'包宝宝': ['包大宝宝', '包小宝宝', '包老宝宝', '真的很好看']}
    # print(pickle.load(f2)) # {'alex': ['男', 1000, '中国']}
    # print(pickle.load(f2)) # {'alex1': ('women', 'women', '老女人')}
    while True:
    try:
    print(pickle.load(f2))
    except EOFError:
    break
    5.shelve 的用法 与文件相关,只能在python中用.
    给文件写入一个键值对; 并输出键值对的值
    import shelve
    f = shelve.open('shelve_file')
    f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据
    f.close()
    f1 = shelve.open('shelve_file')
    existing=f1["key"] #{'int': 10, 'float': 9.5, 'string': 'Sample data'}
    f1.close()
    print(existing)
    #给key的值(字典)添加一个键值对.
    import shelve
    f2 = shelve.open('shelve_file',writeback=True) # writeback允许给文件加值
    f2['key']['new_value'] = 'this was not here before'
    print(f2['key'])
    f2.close()
  • 相关阅读:
    SA(后缀数组)专题总结
    LCT总结
    多项式全家桶
    fft.ntt,生成函数,各种数和各种反演
    P3939 数颜色
    P1879 [USACO06NOV]玉米田Corn Fields
    主席树模板
    P2633 Count on a tree
    P1972 [SDOI2009]HH的项链
    数论
  • 原文地址:https://www.cnblogs.com/J-7-H-2-F-7/p/9321485.html
Copyright © 2011-2022 走看看