zoukankan      html  css  js  c++  java
  • python3_json&pickle

    # 用eval内置方法可以将一个字符串转成python
    # 对象,但是eval是有局限性的,
    # 对于普通数据类型,json.load和eval都能用,
    # 但是遇到特殊类型时,eval就不管用了,
    # 所以以eval的重点还是通常用来执行一个字符串表达式,
    # 并返回表达式的值。
    # import json
    # x = "[null,true,false,1]"
    # # print(eval(x))
    # print(json.loads(x))
    '''
    什么是序列化?
    我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,
    在Python中叫pickling,在其他语言中也被称之为
    serialization,marshalling,flattening等等,都是一个意思。
    序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
    反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
    '''
    #------------------------------------------------------
    # import json
    # dic = {'name':'alvin', 'age':23, 'sex':'male'}
    # print(type(dic))
    # <class 'dict'>

    # j = json.dumps(dic)
    # print(type(j))
    # <class 'str'>

    # f = open('序列化对象', 'w')
    # f.write(j) #--------------等价于json.dumps(dic, f)
    # f.close()

    # ------------------------------------
    # 反序列化
    # import json
    # f = open('序列化对象')
    # data = json.loads(f.read())
    # 等价于data=json.load(f)

    #---------------------------------------
    # 注意
    # import json
    # doc = "{'l':lll}" # json 不认单引号
    # doc = str({"1":111}) # 报错,因为生成的数据还是单引号:{'one':1}
    # doc = '{"1":"111"}'
    # print(json.loads(doc))
    #-----------------------------------------------------
    # conclusion:
    # 无论数据是怎样创建的,只要满足json格式
    # 就可以json.loads出来,不一定非要dumps的数据才能loads

    # pickle
    ##=---------------序列化
    # import pickle
    # dic = {'name':'jocket22333', 'age':26, 'sex':'male'}
    # print(type(dic)) #<class 'dict'>
    #
    # j = pickle.dumps(dic)
    # print(type(j)) #<class 'bytes'>
    #
    # f = open('序列化对象pickle', 'wb')
    # #注意w是写入str, wb是写入bytes,j是bytes
    # f.write(j) #---------等价于pickle.dump(dic, f)
    #
    # f.close()


    #------------------------------反序列化
    import pickle
    f = open("序列化对象pickle", 'rb')
    data = pickle.loads(f.read())
    # 等价于data = pickle.loads(f)
    print(data['age'])

    # pickle 的问题和其他编程语言特有的序列化
    # 问题一样,就是它只能用于python
    # 并且不同版本的python彼此都不兼容
    # 因此只能用pickle用于保存那些
    # 不重要的数据,不能成功反序列化也没关系
    #====================================================
    #------------------------------------------------
    # shelve模块比pickle模块简单,只有一个open函数
    # 返回类似字典对象,可读可写
    # key必须为字符串,而值可以是python所支持的数据类型
    import shelve
    f = shelve.open(r'shelve.txt')
    f['stu1_info'] = {'name':'jocket2333', 'age':'15'}
    f['stu2_info'] = {'name':'alex','age':'20'}
    f['school_info'] = {'website':'oldboyedu.com', 'city':'beijing'}

    # f.close()
    print(f.get('stu1_info')['age'])
     
  • 相关阅读:
    获取CheckBoxList当前选择项索引
    IE游览器与CMYK模式的JPEG格式图片不兼容
    jquery listbox左右移动 并且取值
    JS保留2位小数
    list.Contain 与 list.FindIndex()用法记录
    CSS 手型显示样式
    分页存储过程
    C#将datatable生成easyui的绑定tree 的json数据格式
    URL编码方法的比较
    UNIX I/O with TCP/IP
  • 原文地址:https://www.cnblogs.com/qianjunye/p/10357677.html
Copyright © 2011-2022 走看看