zoukankan      html  css  js  c++  java
  • python 模块之路 序列化 json pickle

    python 序列化

    序列化 :  字符串  bytes

    序列:  列表  元祖  字符串  bytes

    把其他数据类型  转换成字符串  bytes  序列化的过程

    转换str

    # dic = {'1':'2'}
    # print([str(dic),dic])
    # print([str([1,2,3]),[1,2,3]])

    为什么要把其他数据类型转换成字符串?

    能够在网络上传输的只能是bytes

    能够存储在文件里的只有bytes和str

    # dic = {'小明':{'phone_num':123123123123,}}
    # '''
    # 小明|电话|性别
    # 小张|...
    # '''
    # 字典 -> 字符串 -通过网络去传输-> 字符串 -> 字典
    
    # 转字符串的过程 不就是数据类型的强制转换么?为什么要学个序列化模块?
    # 字符串 -> 字典
    # str_dic = str([1,2,3])
    # print(str_dic,type(str_dic))
    
    
    # 文件中读出来的 网络上接收来的
    # res = eval(str_dic)
    # print(res,type(res))
    
    # eval 要谨慎的使用,用户的输入/网络上接收的数据/文件中的内容
    # eval('import os;os.remove('c:')')
    # eval('import urllib;')
    
    # 你已知的代码 但是可能需要一些拼接 根据你自己的逻辑去做的拼接
    #方法练习
    #
    dic = {'key' : 'value','key2' : 'value2'} # import json # ret = json.dumps(dic) # 序列化 # print(dic,type(dic)) # print(ret,type(ret)) # res = json.loads(ret) # 反序列化 # print(res,type(res)) # 问题1
    # dic = {1 : 'value',2 : 'value2'} # ret = json.dumps(dic) # 序列化 # print(dic,type(dic)) # print(ret,type(ret)) # # res = json.loads(ret) # 反序列化 # print(res,type(res)) # 问题2
    # dic = {1 : [1,2,3],2 : (4,5,'aa')} # ret = json.dumps(dic) # 序列化 # print(dic,type(dic)) # print(ret,type(ret)) # res = json.loads(ret) # 反序列化 # print(res,type(res)) # 问题3
    # s = {1,2,'aaa'} # json.dumps(s) # 问题4
    # TypeError: keys must be a string
    # json.dumps({(1,2,3):123})

    json模块

    json在所有的语言之间都通用  :  json序列化的数据  在python上序列化了   那在Java 中也可以反序列化

    能够处理的数据类型是非常有限的  :  字符串  列表 字典  数学

    字典中的key只能是字符串

    后端语言  Java c   c++  c#

    前端语言  在网页上展示的

    import json
    # dic = {'key' : 'value','key2' : 'value2'}
    # ret = json.dumps(dic)  # 序列化
    # with open('json_file','a') as f:
    #     f.write(ret)
    
    # 从文件中读取字典
    # with open('json_file','r') as f:
    #     str_dic = f.read()
    # dic = json.loads(str_dic)
    # print(dic.keys())
    
    # dump load 是直接操作文件的
    # dic = {'key1' : 'value1','key2' : 'value2'}
    # with open('json_file','a') as f:
    #     json.dump(dic,f)
    
    # with open('json_file','r') as f:
    #     dic = json.load(f)
    # print(dic.keys())
    
    # 问题5 不支持连续的存 取
    # dic = {'key1' : 'value1','key2' : 'value2'}
    # with open('json_file','a') as f:
    #     json.dump(dic,f)
    #     json.dump(dic,f)
    #     json.dump(dic,f)
    
    # with open('json_file','r') as f:
    #     dic = json.load(f)
    # print(dic.keys())
    
    # 需求 :就是想要把一个一个的字典放到文件中,再一个一个取出来???
    # dic = {'key1' : 'value1','key2' : 'value2'}
    #
    # with open('json_file','a') as f:
    #     str_dic = json.dumps(dic)
    #     f.write(str_dic+'
    ')
    #     str_dic = json.dumps(dic)
    #     f.write(str_dic + '
    ')
    #     str_dic = json.dumps(dic)
    #     f.write(str_dic + '
    ')
    
    # with open('json_file','r') as f:
    #     for line in f:
    #         dic = json.loads(line.strip())
    #         print(dic.keys())
    
    # json
    # dumps loads
        # 在内存中做数据转换 :
            # dumps 数据类型 转成 字符串 序列化
            # loads 字符串 转成 数据类型 反序列化
    # dump load
        # 直接将数据类型写入文件,直接从文件中读出数据类型
            # dump 数据类型 写入 文件 序列化
            # load 文件 读出 数据类型 反序列化
    # json是所有语言都通用的一种序列化格式
        # 只支持 列表 字典 字符串 数字
        # 字典的key必须是字符串
    
    
    # dic = {'key':'你好'}
    # print(json.dumps(dic,ensure_ascii=False))
    
    # import json
    # data = {'username':['李华','二愣子'],'sex':'male','age':16}
    # json_dic2 = json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),ensure_ascii=False)
    # print(json_dic2)
    
    # 存文件/传网络

    import   pickle

    支持在python中几乎所有的数据类型

    import pickle
    # 支持在python中几乎所有的数据类型
    dic = {(1,2,3):{'a','b'},1:'abc'}
    
    # ret = pickle.dumps(dic)
    # print(ret)
    
    #
    2. dumps 序列化的结果只能是字节 # print(pickle.loads(ret))
    #
    3.只能在python中使用
    #
    4.在和文件操作的时候,需要用rb wb的模式打开文件
    #
    5.可以多次dump 和 多次load
    # dump # with open('pickle_file','wb') as f: # pickle.dump(dic,f)
    # load # with open('pickle_file','rb') as f: # ret = pickle.load(f) # print(ret,type(ret))
    # dic = {(1,2,3):{'a','b'},1:'abc'} # dic1 = {(1,2,3):{'a','b'},2:'abc'} # dic2 = {(1,2,3):{'a','b'},3:'abc'} # dic3 = {(1,2,3):{'a','b'},4:'abc'} # with open('pickle_file','wb') as f: # pickle.dump(dic, f) # pickle.dump(dic1, f) # pickle.dump(dic2, f) # pickle.dump(dic3, f)
    # with open('pickle_file','rb') as f: # ret = pickle.load(f) # print(ret,type(ret)) # ret = pickle.load(f) # print(ret,type(ret)) # ret = pickle.load(f) # print(ret, type(ret)) # ret = pickle.load(f) # print(ret, type(ret)) # ret = pickle.load(f) # print(ret, type(ret))

    with open('pickle_file','rb') as f: while True: try: ret = pickle.load(f) print(ret,type(ret)) except EOFError: break

    继续加强学习整理

  • 相关阅读:
    4 Python+Selenium的元素定位方法(link/partial link)
    3 Python+Selenium的元素定位方法(id、class name、name、tag name)
    2 Selenium3.0+Python3.6环境搭建
    1 Selenium打开浏览器
    目录处理文件&链接命令
    DOS批处理命令-@命令
    DOS批处理命令-echo
    吐槽一二三
    编码神器之sublime(插件安装)
    两天来学习C的感受
  • 原文地址:https://www.cnblogs.com/SUIFAN/p/9513944.html
Copyright © 2011-2022 走看看