zoukankan      html  css  js  c++  java
  • 常用模块json pickle

    常用模块json pickle

    序列化:

    把内存中的数据,转换成字节或字符串的形式,以便于进行存储或者
    网络传输.

    内存中数据 -> 字节串/字符串 : 序列化
    字节串/字符串 -> 内存中的数据 : 反序列化

    json :将数据转换成字符串,用于存储或网络传输.

    import json
    s = json.dumps([1,2,3]) # 把指定的对象转换成json格式的字符串
    print(type(s))
    print(s)        # '[1,2,3]'   [1,2,3]
    
    s = json.dumps((1,2,3))     # 元组序列化后,变成列表
    print(s)
    
    #json 不能序列换set类型
    # res = json.dumps(set('abc'))      # Object of type 'set' is not JSON serializable
    
    
    

    将json结果写到文件中

     with open('a.txt',mode='at',encoding='utf-8') as f:
         json.dump([1,2,3],f)
    

    反序列化

    # res = json.dumps([1,2,3])
    # lst = json.loads(res)           # 反序列化
    # print(type(lst))
    # print(lst)
    
    # 从文件中反序列化
    # with open('a.txt',encoding='utf-8')as f:
    #     res = json.load(f)
    #     print(type(res))
    #     print(res)
    

    json文件通常是一次性写,一次性读.

    使用另一种方式,可以实现多次写,多次读.

    with open('json.txt',mode='at',encoding='utf-8') as f:
        f.write(json.dumps([1,2,3]) + '
    ')
        f.write(json.dumps([4,5,5]) + '
    ')
        
    #  把分次序列化的json字符串,反序列化回来
    # with open('json.txt',mode='rt',encoding='utf-8') as f:
        # res = json.loads(f.readline().strip())
        # print(res)
        # res2 = json.loads(f.readline().strip())
        # print(res2)
        # 使用循环改进:
        # for x in f:
        #     print(json.loads(x.strip()))
        
    

    pickle模块:

    将Python中所有的数据类型.转换成字节串.序列化过程
    将字节串转换成python中数据类型,反序列化过程.

    import pickle
    
    bys = pickle.dumps([1,2,3])
    print(type(bys))    # <class 'bytes'>
    print(bys)          # b'x80x03]qx00(Kx01Kx02Kx03e.'
    
    所有的数据类型都可以进行序列化
    bys = pickle.dumps(set('abc'))
    res = pickle.loads(bys)
    print(type(res))
    
    # 把pickle序列化内容写入文件中
    # with open('c.txt',mode='wb') as f:
    #     pickle.dump([1,2,3],f)
    
    # 从文件中反序列化pickle数据
    # with open('c.txt',mode='rb') as f:
    #     res = pickle.load(f)
    #     print(type(res))
    #     print(res)
    
    # 多次pickle数据到同一个文件中
    # with open('c.txt',mode='ab') as f:
    #     pickle.dump([1,2,3],f)
    #     pickle.dump([1,2,3],f)
    #     pickle.dump([1,2,3],f)
    
    # 从文件中反序列化pickle数据
    # with open('c.txt',mode='rb') as f:
    #     for x in range(4):
    #         res = pickle.load(f)
    #         print(res)
    

    json,pickle的比较:

    json:

    1.不是所有的数据类型都可以序列化.结果是字符串.
    2.不能多次对同一个文件序列化.
    3.json数据可以跨语言

    pickle:

    1.所有python类型都能序列化,结果是字节串.
    2.可以多次对同一个文件序列化
    3.不能跨语言.

  • 相关阅读:
    django 静态文件模版上传下载配置
    drf ModelViewSet之匹配路由参数
    Django drf序列化外键关联表ID以为字段
    Django 自关联递归序列化模块 django-rest-frame-recursive模块
    Python利用Psycopg2模块将Excel表格数据导入Postgressql
    PyTorch中view的用法
    P1113 杂务 【拓扑排序】
    P3916 图的遍历 【反向建图+DFS】
    P2814 家谱【map型的并查集】
    P1102 A-B 数对【map】
  • 原文地址:https://www.cnblogs.com/wyh0717/p/13036021.html
Copyright © 2011-2022 走看看