python-json&pickle模块(序列化模块)

什么叫序列化?

就是把内存里的数据存到硬盘上。

为什么要把了内存里的数据存在硬盘上?

1.程序在运行,关闭了,内存数据丢失。

2.下次程序再启动,再从硬盘上读回来,还是原来的格式的话,那是极好的。

3.内存里的数据多为嵌套字典的形式。

把内存数据取出来有什么意义?

  1.把内存数据,通过网络 共享给其他人。

  2.可以跨平台、跨语言共享数据。eg:c、java、python

#1.json 用法
# dumps 序列化

import json


data = {'k1': 123, 'k2': 345}
# 把data序列化成字符串
d = json.dumps(data)
print(d, type(d))

# 把data序列化成字符串并存入文件
f = open('test.json', 'w')
json.dump(data, f)

# 把序列化字符串转回字典
d2 = json.loads(d)
print(d2['k1'])

# 把data序列化成字符串并存入文件
f = open('test.json', 'r')
data2 = json.load(f)
print(data2, type(data2))

注意:dump可以写多次,但是load只能是一次。会报json反序列化错误。

2.pickle

注意:open方法时,只能用‘wb’或‘rb’。

# 2.pickle 用法
import pickle
#
data2 = {'k1': 123, 'k2': 345}
pk = open('data.pkl', 'wb')
d2 = pickle.dump(data2, pk)
print(d2)

# 把data序列化成字符串并存入文件
f2 = open('data.pkl', 'rb')
data3 = pickle.load(f2)
print(data3, type(data3))

pickle和json 有什么区别呢?

json  支持:字符串、列表、字典、等类型序列化  json在其他平台的语音都能使用。

pickle 支持:全部的类型、包括函数  但是pickle只在python中特有

shelve模块(持久化)

它与json、pickle 的区别是,shelve模块是对pickle的封装,是python独有的,允许load多次

import shelve
# 2.反持久化操作(load)
f = shelve.open('shelve_test')
print(list(f.items()))
print()
# 1. 查
print(f['names'])   # 查列表里的值
print(f['info_dic']['name'], f['info_dic']['age'])  # 取列表中字典的值

# 2. 改
# 修改列表的值 ,只能整体替换。
new_lst = ['A', 'b', 'C']
f['names'] = new_lst
print(f['names'])

# 修改列表里字典的值 ,只能整体替换。
new_dic = {'name': 'abc', 'age': 30}
f['info_dic'] = new_dic
print(f['info_dic'])

#
f.popitem()
print(list(f.items()))

 

posted @ 2018-03-29 00:08  OYxing  阅读(186)  评论(0编辑  收藏  举报