python基础——Json和Pickle

本文详细介绍了Python中两种常见的序列化方式:JSON和Pickle。解释了它们的工作原理,包括如何将复杂的数据结构转化为可存储的形式,并提供了具体的代码示例来展示序列化和反序列化的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Json
Json是能跨语言序列化数据,也就是说在python中Json序列化的数据放到Java同样可用,序列化的意思就是能按字典、列表等python数据的格式转换成字符串存储在内存中(内存只能按字节或者二进制形式的存储)。Json只能序列化简单的数据,例如:列表、字典、集合等数据格式,函数就不能进行序列化。

序列化举例说明:

import json
#json只能处理简单的数据,例如列表、字典、集合之类的,它是一种夸语言之间的交互式
info={
    'name':'Jorocco',
    'age':23,
    }
f=open("test.txt","w")#文件只能存字符串,把对象转成字符串就是序列化
f.write(json.dumps(info))#通过此方法将数据进行序列化
json.dump(info,f)#与上面的方法完全等同
#f.write(str(info))#要是不通过Json方法,就只能通过此方法
f.close()

有序列化,就有反序列化,反序列化就是将字符串转成python特定的格式。

反序列化举例说明:

import json
f=open("test.txt","r")
data=json.loads(f.read())#反序列方法
data=json.load(f)#完全等同于上面的反序列化
print(data)

pickle
pickle,用于python所有的类型 和 python的数据类型间进行转换,相比Json,它能转换比如函数类型。

pickle序列化举例说明

import pickle
def sayhi(name):
     print("hello,",name)
     print("hello2")
info={
    'name':'Jorocco',
    'age':23,
    'func':sayhi#pickle可以序列化python所有的数据类型,只需要将函数的地址传递进来,但是反序列化的时候则会报错,因为该地址随着此程序的运行结束就被回收了
    }
f=open("test.txt","wb")#pickle存储的是二进制文件,所以写入的时候为'wb'
f.write(pickle.dumps(info))#通过此方法将数据进行序列化
#pickle.dump(info,f)  #等同于f.write(pickle.dumps(info))
f.close()

pickle反序列化举例说明

import pickle
def sayhi(name):
     print("hello,",name)
f=open("test.txt",'rb')
data=pickle.loads(f.read())#如果就这样的话,会报错,因为序列化了一个函数,它的地址随着序列化程序的运行结束就被回收了
pickle.load(f)#和上面的效果一样
#但是当我们加了上面的那个和序列化函数的名称一样的函数时,就可以反序列化了,即使功能不同
print(data['func']("Jorocco"))

注意:在python3中可以序列化多次,但只能反序列化一次,因此,序列化了多次,反序列化的时候就会出错,所以我们都只序列化一个文件,反序列化一个文件,如果实在要进行序列化多次,那就序列化成多个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值