Python的json和pickle模块

本文介绍了Python中的两种序列化方式:JSON和pickle。JSON序列化用于将数据转化为字符串便于存储或传输,支持基本数据类型;pickle则能处理所有Python数据类型,适用于Python对象的持久化。同时,文中还展示了如何处理datetime类型的序列化问题。两者区别在于JSON适合跨语言交互,而pickle专为Python内部使用,不兼容不同Python版本的对象序列化。

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

1.json序列化

  1. 序列化(json.dumps):是将内存中的对象存储到硬盘,变成字符串,即将字典转化为字符串,写入json文件
  2. 反序列化(json,loads)将保存在硬盘中的对象从新加载到内存中,即将字符串(str)转化为
  3. json.dumps(data,ensure_ascii=False, indent=4)
# json序列化

import json

info = {
    'name':"tom",
    "age" :"100"
}
f = open("test.txt",'w')
# print(json.dumps(info))
f.write(json.dumps(info))
f.close()
#json反序列化代码
import json
f = open("test.txt","r")
data = json.loads(f.read())
f.close()
print(data["age"])

2.pickle序列化

  • python的pickle模块实现了python的所有数据序列和反序列化。

  • 基本上功能使用和JSON模块没有太大区别,方法也同样是dumps/dump和loads/load

  • 与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。

# pickle 序列化代码

#pickle序列化代码
import pickle
info = {
    'name':"tom",
    "age" :"100"
}
f = open("test.txt",'wb')
f.write(pickle.dumps(info))
f.close()
# pickle 反序列化代码
#pickle反序列化代码
import pickle
f = open("test.txt","rb")
data = pickle.loads(f.read())
f.close()
print(data["age"])

3.解决序列化datetime类型

import json,datetime

class JsonCustomEncoder(json.JSONEncoder):
    def default(self, field):
        if isinstance(field, datetime.datetime):
            return field.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(field, datetime.date):
            return field.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, field)

t = datetime.datetime.now()

print(type(t),t)
f = open('ttt','w')                              #指定将内容写入到ttt文件中
f.write(json.dumps(t,cls=JsonCustomEncoder))      #使用时候只要在json.dumps增加个cls参数即可

4.JSON和pickle模块的区别

  • 1.JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
  • 2.JSON用于各种语言之间的字符转换。
  • pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值