数据交换格式
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