json & pickle & shelve
1. json的序列化与反序列化
json的使用需要导入该模块,一般使用import json即可。
-
json的序列化
方法1:json.dumps(obj)
例如:f = open('file.txt','w')
json.dumps(f.write([1,2,3,]))
f.close()
#使用该方法把内存数据以字符串的格式存储到文件中。
方法2:json.dump(obj,file)
例如:f = open('file.txt','w')
json.dump([1,2,3,],f)
f.close()
#使用该方法不用打开调用文件的写入函数即可直接把数据写入到文件中。 -
json的反序列化
方法1:json.loads(obj)
例如:f = open('file.txt','r')
print(json.loads(f.read()))
f.close()
#使用该方法把文件中的数据读取到内存中,并转化为内存中的数据类型。
方法2:json.load(file)
例如:f = open('file.txt','r')
print(json.load(f))
f.close()
#该方法不用调用文件的读取函数即可直接把数据读取到内存中。
2. pickle的序列化与反序列化
pickle的使用需要导入该模块,一般使用import pickle即可。
-
pickle的序列化
方法1:pickle.dumps(obj)
例如:f = open('file.txt','wb')
json.dumps(f.write([1,2,3,]))
f.close()
#使用该方法把内存数据以二进制的格式存储到文件中
方法2:pickle.dump(obj,file)
例如:f = open('file.txt','wb')
json.dump([1,2,3,],f)
f.close()
#使用该方法不用打开调用文件的写入函数即可直接把数据写入到文件中 -
pickle的反序列化
方法1:pickle.loads(obj)
例如:f = open('file.txt','rb')
print(json.loads(f.read()))
f.close()
#使用该方法把文件中的数据读取到内存中,并转化为内存中的数据类型。
方法2:pickle.load(file)
例如:f = open('file.txt','rb')
print(json.load(f))
f.close()
#该方法不用调用文件的读取函数即可直接把数据读取到内存中。
3. json与pickle的对比:
1. 相同点
- 两者写入和读取数据的方法一样。
- 两者对于同一个文件写入和读取时的数据都是一个整体。
- 虽然写入时可以写入多次,但读取只能读取一次,因此一般同一个文件只建议写入一次。
2. 不同点
- json在写入和读取数据时,是以字符串类型进行操作。
- pickle在写入和读取数据时,则是以二进制的格式进行操作。
- json只支持简单的数据类型,如字符串、列表、字典、元祖、集合等。
- pickle支持简单的数据类型,也支持复杂的数据类型,如函数、类等。
- json可以跨语言进行转换。
- pickle只能在Python中使用。
3. shelve
该模块的方法和字典是一样的,利用方法把数据以键值对的方式进行存储到文件中,读取时同样使用键值对进行获取。
例如:f = shelve.open('file')
f[key] = value
f.close()
#利用该模块打开文件时,不需要指定打开的模式。