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

继续加强学习整理

原文地址:https://www.cnblogs.com/SUIFAN/p/9513944.html