序列化模块

2019-08-20  本文已影响0人  Yanl__

json

dumps 序列化方法 (数字,字符串,列表,字典,元组(元组序列化成str,反序列化为列表))
loads 反序列化方法
##########################

dump 

import json
dic = {1:'a',2:'b'}
f = open('file', 'w', encoding='utf-8')
json.dump(dic, f)
# json.dump(dic, f, ensure_ascii=False)   ensure_ascii 设置为false可以在文件中显示中文,否则显示bytes
f.close()

load

f = open('file')
res = json.load(f)
f.close()
print(res)

pickle

import pickle
dic = {'k1':'v1','k2':'v2'}
str_dic = pickle.dumps(dic)
print(str_dic)  # 一串二进制内容
import pickle
import time
struct_time1  = time.localtime(1000000000)
struct_time2  = time.localtime(2000000000)
f = open('pickle_file','wb')
pickle.dump(struct_time1,f) # 一次dump
pickle.dump(struct_time2,f)  # 第二次dump
f.close()
f = open('pickle_file','rb')
struct_time1 = pickle.load(f)
struct_time2 = pickle.load(f)
print(struct_time1.tm_year)
print(struct_time2.tm_year)
f.close()

shelve

import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5}  # 直接对文件句柄进行操作,就可以写入数据
f.close()

import shelve
f1 = shelve.open('shelve_file')
# f1 = shelve.open('shelve_file', writeback = True) writeback设置为True,可以对对象进行修改,但是会增加额外的内存消耗,并且在DB close()的时候会将所有对象进行重新写入,因为shelve不知道哪些对象没有修改。
existing = f1['key'] # 取出数据的时候只需要直接用key获取,如果key不存在,会报错
f1.close()
print(existing)
上一篇下一篇

猜你喜欢

热点阅读