常用模块json pickle

常用模块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]) + '\n')
    f.write(json.dumps([4,5,5]) + '\n')
    
#  把分次序列化的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'\x80\x03]q\x00(K\x01K\x02K\x03e.'
所有的数据类型都可以进行序列化
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.不能跨语言.

posted @ 2020-06-03 10:46  爱浪的跳蚤  阅读(208)  评论(0编辑  收藏  举报