常用模块json pickle
序列化:
把内存中的数据,转换成字节或字符串的形式,以便于进行存储或者
网络传输.
内存中数据 -> 字节串/字符串 : 序列化
字节串/字符串 -> 内存中的数据 : 反序列化
json :将数据转换成字符串,用于存储或网络传输.
import json
s = json.dumps([1,2,3]) # 把指定的对象转换成json格式的字符串
print(type(s))
print(s) # '[1,2,3]' [1,2,3]
s = json.dumps((1,2,3)) # 元组序列化后,变成列表
print(s)
#json 不能序列换set类型
# res = json.dumps(set('abc')) # Object of type 'set' is not JSON serializable
将json结果写到文件中
with open('a.txt',mode='at',encoding='utf-8') as f:
json.dump([1,2,3],f)
反序列化
# res = json.dumps([1,2,3])
# lst = json.loads(res) # 反序列化
# print(type(lst))
# print(lst)
# 从文件中反序列化
# with open('a.txt',encoding='utf-8')as f:
# res = json.load(f)
# print(type(res))
# print(res)
json文件通常是一次性写,一次性读.
使用另一种方式,可以实现多次写,多次读.
with open('json.txt',mode='at',encoding='utf-8') as f:
f.write(json.dumps([1,2,3]) + '
')
f.write(json.dumps([4,5,5]) + '
')
# 把分次序列化的json字符串,反序列化回来
# with open('json.txt',mode='rt',encoding='utf-8') as f:
# res = json.loads(f.readline().strip())
# print(res)
# res2 = json.loads(f.readline().strip())
# print(res2)
# 使用循环改进:
# for x in f:
# print(json.loads(x.strip()))
pickle模块:
将Python中所有的数据类型.转换成字节串.序列化过程
将字节串转换成python中数据类型,反序列化过程.
import pickle
bys = pickle.dumps([1,2,3])
print(type(bys)) # <class 'bytes'>
print(bys) # b'x80x03]qx00(Kx01Kx02Kx03e.'
所有的数据类型都可以进行序列化
bys = pickle.dumps(set('abc'))
res = pickle.loads(bys)
print(type(res))
# 把pickle序列化内容写入文件中
# with open('c.txt',mode='wb') as f:
# pickle.dump([1,2,3],f)
# 从文件中反序列化pickle数据
# with open('c.txt',mode='rb') as f:
# res = pickle.load(f)
# print(type(res))
# print(res)
# 多次pickle数据到同一个文件中
# with open('c.txt',mode='ab') as f:
# pickle.dump([1,2,3],f)
# pickle.dump([1,2,3],f)
# pickle.dump([1,2,3],f)
# 从文件中反序列化pickle数据
# with open('c.txt',mode='rb') as f:
# for x in range(4):
# res = pickle.load(f)
# print(res)
json,pickle的比较:
json:
1.不是所有的数据类型都可以序列化.结果是字符串.
2.不能多次对同一个文件序列化.
3.json数据可以跨语言
pickle:
1.所有python类型都能序列化,结果是字节串.
2.可以多次对同一个文件序列化
3.不能跨语言.