Python学习 :json、pickle&shelve 模块
数据交换格式
json 模块
json (javascript object notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 json 是javascript的一个子集,但 json 是独立于语言的文本格式,并且采用了类似c语言家族的一些习惯
json 建构于两种结构基础之上:
1、'名称/值'对的集合。在不同的语言中,它被理解为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list)或者关联数组(associative array)
2、值的有序列表(an ordered list of values)。在某些语言中,它被理解为数组(array),类似于python中的类表
json 模块的主要功能:
1、序列化:encoding,把一个python对象编码转化成json字符串
2、反序列化:decoding,把json格式字符串解码转换为python数据对象
序列化的两种方法
# dumps 方法
import json
dic = {'name':'alex','age':'25'}
data = json.dumps(dic)
f = open('test','w')
f.write(data)
f.close()
# dump 方法
import json
dic = {'name':'mike','age':'20'}
f = open('test','a')
json.dump(dic,f) # 不用再手动去写入文件中
f.close()
反序列化的两种方法
# loads 方法
import json
f = open('test','r')
data = f.read() # 在json文件中的并不是字典,而是json的一种字符串格式
data = json.loads(data) # 把json数据重新转换成为字典类型
print(data['name'])
# load 方法
import json
f = open('test','r')
a = json.load(f) # 不用手动去read json中的数据
print(a['name'])
pickle 模块
对于类和函数对象,json不能进行序列化,可以使用 pickle 模块来进行相应的操作
pickle 模块只能用于python中,不同版本的python可能彼此都不兼容,因此,只能用pickle保存那些不重要的数据
pickle 写入方式:
import pickle
def foo():
print('hello world!')
data = pickle.dumps(foo)
f = open('test1','wb')
f.write(data)
f.close()
pickle 的读取方式与 json 模块一致,同为 dump ,dumps 函数
shelve 模块
shelve 模块是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化
shelve 使用方式:
import shelve
with shelve.open("shelve_test") as f:
f["name"] = 'alex'
f["age"] = '25'
# 这里直接保存到了文件中,生成了3个文件shelve_test.bak,shelve_test.dat,shelve_test.dir
with shelve.open('shelve_test') as f: # 只使用shelvefile名字即可
print(f["name"])
for key, value in f.items():
print(key, ': ', value)
>>> alex
age : 25
name : alex
下一篇: Filter---javaweb的过滤器