1.序列化模块指的就是把其他的数据类型转换成字符串数据类型;序列化的数据类型必须是有序的,主要方法有三种:json、pickle、shelve
2为啥要用序列化模块:1.写文件时只能写入字符串文件,在文件的传输时,只能传输bytes类型。
3.从其他数据类型到字符串叫做序列化,反之叫做反序列化。
4.json 成为程序语言界通用的语言:所使用的数据类型主要是:整型、字符串、列表、元组(要把元组转换成列表在进行计算)
4.1json dumps序列化方法,loads反序列化方法:
import json dic={'k1':'v1','k2':'v2'} print(type(dic),dic) ret=json.dumps(dic) print(ret,type(ret)) 结果 <class 'dict'> {'k1': 'v1', 'k2': 'v2'} {"k1": "v1", "k2": "v2"} <class 'str'>View Code
ret1=json.loads(ret) print(ret1,type(ret1)) 结果为 {'k1': 'v1', 'k2': 'v2'} <class 'dict'>View Code
4.2dump和load操作:对文件操作时进行的修改:
import json dic={1:'a',2:'b'} f=open('fff','w',encoding='utf-8') json.dump(dic,f) f.close() f=open('fff') res=json.load(f) f.close() print(res) 结果为 {'1': 'a', '2': 'b'}View Code
4.3dump和load操作时要先全部写入,然后再全部读取:会占据很大内存;
import json dic={1:'中国',2:'高工'} f=open('fff','w',encoding='utf-8') json.dump(dic,f)View Code
改变这种:
import json dic={1:'中国',2:'高工'} f=open('fff','w',encoding='utf-8') json.dump(dic,f,ensure_ascii=False)View Code
import json l=[{'k1':'111'},{'k2':'222'},{'k3':'111'}] f=open('file','w') import json for dic in l: str_dic=json.dumps(dic) f.write(str_dic+'\n') f.close() 结果为View Code
import json f=open('file','r',encoding='utf-8') l=[] for line in f: l.append(dic) f.close() print(l)View Code
5.pickle是将所有的python数据类型转换成字符串数据类型。pickle序列化只有python能理解,且部分反序列依赖pyton代码。
import pickle dic={'k1':'v1','k2':'v3','k3':'v3'} str_dic=pickle.dumps(dic) print(str_dic) dic2=pickle.loads(str_dic) print(dic2) 结果为 b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v3q\x04X\x02\x00\x00\x00k3q\x05h\x04u.' {'k1': 'v1', 'k2': 'v3', 'k3': 'v3'}View Code
5.5
import time import pickle struct_time1=time.localtime(1000000000) struct_time2=time.localtime(000000000) f=open('pickle_file','wb') pickle.dump(struct_time1,f) pickle.dump(struct_time2,f) f.close() f=open('pickle_file','rb') ret1=pickle.load(f) ret2=pickle.load(f) print(ret1,ret2) f.close() 结果为 time.struct_time(tm_year=2001, tm_mon=9, tm_mday=9, tm_hour=9, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=252, tm_isdst=0) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)View Code