亲宝软件园·资讯

展开

python基础-json、pickle模块

我是dev小白 人气:0

json、pickle区别

总结:

"""
json:
1.不是所有的数据类型否可以序列化,序列化返回结果为字符串
2.不能多次对同一文件序列化
3.json数据可以跨语言

pickle:
1.所有python数据类型都可以序列化,结果为字节串
2.可以多次对同一文件序列化
3.不能跨语言(只python)
"""

json

  • 序列化:将内存中的数据,转换成字节串,用以保存在文件或者网络传输,称为序列化过程

  • 反序列化:从文件中\网络中获取的数据,转换成内存中原来的数据类型,成为反序列化过程

"""
json模块
java脚本对象标记语言
把所有的东西都转换成字符串格式
"""
import json

# 序列化:将数据转换为字符串,用以存储或者网络传输
# dumps:从内存到内存
res = json.dumps(10)
print(res)   # "10"

# 元组进行json转换后,会转换为列表
res = json.dumps((1, 2, 3))
print(res)   # "[1, 2, 3]"
lst = json.loads(res)
print(type(lst))    # <class 'list'>
print(lst)          # [1, 2, 3]


res = json.dumps([1, 2, 3, 4])
print(res)   # "[1, 2, 3, 4]"

res = json.dumps({"name":"张三", "age": 20})
print(res)    # "{"name": "\u5f20\u4e09", "age": 20}"

# set不能转换成json字符串
# res = json.dumps(set("abc"))
# print(res)    # TypeError: Object of type 'set' is not JSON serializable
# tup1 = (1, 2, 3)
# # print(set(tup1))
# res = json.dumps(set(tup1))
# print(res)

# dump:从内存到外边   写入到文件使用dump
# dic = {"name":"张三", "age": 20}
# with open("aa.txt", encoding="utf-8", mode="at") as f:
#     # json.dump([1, 2, 3], f)    # 把列表转换为json字符串,然后写入文件
#     json.dump(dic, f)


# 反序列化:把json字符串转换成内存中存储的数据类型,如:列表,字符串,字典

# 元组进行json转换后,再次反序列化后显示结果为:列表
# res = json.dumps((1, 2, 3))
# print(res)   # "[1, 2, 3]"
# lst = json.loads(res)
# print(type(lst))    # <class 'list'>
# print(lst)          # [1, 2, 3]

# 从文件中反序列化
# with open("aa.txt", encoding="utf-8") as f1:
#     res = json.load(f1)   # 不能一次反序列化多次序列化的数据
#     print(type(res))
#     print(res)


# 内存中写入数据
with open("json.str", mode="at", encoding="utf-8") as f:
    f.write(json.dumps([1, 2, 3]) + "\n")
    f.write(json.dumps({"name":"张三", "age":18}) + "\n")


# 从文件中读取数据,转换为内存中存储的数据类型
with open("json.str", encoding="utf-8") as f1:
    # res = json.loads(f1.readline().strip())
    # print(res)
    #
    # res = json.loads(f1.readline().strip())
    # print(res)

    for i in f1:
        print(json.loads(i.strip()))

pickle

"""
pickle
序列化:可以把python的所有数据类型转换为字节串,
反序列化:将字节串转换为python中的数据类型
常用场景:和json一样,一次性读取,一次写入
"""

import pickle
# 序列化元组
byts = pickle.dumps((1,2,3))
print(byts)   # b'\x80\x03K\x01K\x02K\x03\x87q\x00.'

# 反序列化元组
res = pickle.loads(byts)
print(res)    # (1, 2, 3)

# 序列化集合
byts = pickle.dumps(set("abc"))
print(byts)   # b'\x80\x03cbuiltins\nset\nq\x00]q\x01(X\x01\x00\x00\x00aq\x02X\x01\x00\x00\x00bq\x03X\x01\x00\x00\x00cq\x04e\x85q\x05Rq\x06.'

# 反序列化集合
res = pickle.loads(byts)
print(res)   # {'a', 'b', 'c'}

# 使用pickle写入文件    二进制不能指定utf-8编码
with open("pickle.str", mode="ab") as f:
    pickle.dump(set("abcd"), f)
    pickle.dump({"name":"张三", "age":18}, f)

with open("pickle.str", mode="rb") as f1:
    for i in range(2):
        res = pickle.load(f1)
        print(res)

加载全部内容

相关教程
猜你喜欢
用户评论