常用模块 json 与 pickle的 使用
Posted changwenjun-666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用模块 json 与 pickle的 使用相关的知识,希望对你有一定的参考价值。
json 模块 import json from datetime import datetime json.dumps 与 json.dump 可以将常见的数据类型转变为字符串数据 1)、对于datetime类型的数据,需要作出一些修改 data = datetime.now() 需要重写json里的一个类: class ComplexEncoder(json.JSONEncoder): def default(self, o): if isinstance(o,datetime): return o.strftime(‘%Y-%m-%d %H:%M:%S‘) else: return json.JSONEncoder.default(self,o) with open(‘json序列化‘,‘w‘,encoding=‘utf-8‘) as f: f.write(json.dumps(data,cls=ComplexEncoder)+‘\n‘) 2)、对于中文在序列化时,默认会将其装换为unicode,若有需要,可以将其保留为中文字符串 a = ‘michale想在上海买套房‘ with open(‘json序列化‘,‘w‘,encoding=‘utf-8‘) as f: json.dump(a,f,ensure_ascii=False) f.write(‘\n‘) 由上可知:json.dumps()直接操作常规数据,利用write()函数将数据写入 文件里。而json.dump()直接在里面添加两个参数就可以将数据写入文件。 即:前者操作字符串写入,后者直接文件打交道。 对于json.load和json.loads而言,二者只能将字符串类型的字典给转换出来,如果文件里出现了其他类型的数据,就直接报错!
pickle 模块 pickle模块可将任意类型的数据转换为字节类型的数据存入到文件中。 当然也可以直接将这些直接类型的数据取出还原为之前的类型。 import pickle li = [1,2,3,4,5,6,‘qwe‘,‘妹子‘] data = pickle.dumps(li) print(data) #b‘\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05K\x06X\x03\x00\x00\x00qweq\x01X\x06\x00\x00\x00\xe5\xa6\xb9\xe5\xad\x90q\x02e.‘ data1 = pickle.loads(data) print(data1,type(data1)) # [1, 2, 3, 4, 5, 6, ‘qwe‘, ‘妹子‘] <class ‘list‘> # 文件操作 # with open(‘pickle序列化‘,‘wb‘) as f: # # pickle.dump(li,f) # f.write(pickle.dumps(li)) with open(‘pickle序列化‘,‘rb‘) as f: # res = pickle.load(f) # print(res,type(res)) #[1, 2, 3, 4, 5, 6, ‘qwe‘, ‘妹子‘] <class ‘list‘> res = f.read() data2 = pickle.loads(res) print(data2) 因为pickle模块时python独有的,虽然可以序列化任意类型的数据,但是在 文件里查看存入的数据时,会显示乱码。且不同的python版本之间可能会乱码。
json 与 pickle 的总结:
pickle序列化的对象为bytes对象,json序列化为str,当然也可以转码为字节类型;
pickle的序列化结果不通用,json序列化的结果通用!
以上是关于常用模块 json 与 pickle的 使用的主要内容,如果未能解决你的问题,请参考以下文章