python中s和t_Python中关于序列化的讨论,以及dump、dumps和load、loads区别的对比

序列化

序列化:pickle模块 json模块 shelve模块

一.pickle模块

1.pickle模块

1)可以将对象转换为一种可以传输或存储的格式。

2)pickle模块将任意一个python对象换成一个系统字节的操作过程叫做串行化对象。

3)pickle模块实现了python的所有数据序列化和反序列化。它不是用于多种语言间的传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的。

import pickle

#序列化----将数据存储只文件中

info = {"Name:":"XiaoMing","Age:":22}

data_info = open("a.pkl","wb")

pickle.dump(info,data_info)

data_info.close()

#反序化---将文件读取出来并反序列化

data_out =open('a.pkl','rb')

a=pickle.load(data_out)

print(a)

2.dump和dumps的区别:

dump是将对象序列化并保存到文件中

dumps是将对象序列化

3.load和loads的区别:

load将序列化字符串从文件读取并反序列化

loads将序列化字符串反序列化

执行代码:data1 = [1,2,'a',3,'b']pi = pickle.dumps(data1)#dumps用来只是序列化对象

print(pi)

print(pickle.loads(pi))#loads也单单用来反序列化对象

data2 = {'Name':'Alex','Age':22,'Sex':'Boy'}

f = open('b.pkl','wb')

pickle.dump(data2,f)#dump不单把对象序列化,且可以把序列化的对象写入文件

f =open('b.pkl','rb')

print(pickle.load(f))#load可以把对象从文件中读取出来,然后再反序列化

执行的结果:

b'\x80\x03]q\x00(K\x01K\x02X\x01\x00\x00\x00aq\x01K\x03X\x01\x00\x00\x00bq\x02e.'

[1, 2, 'a', 3, 'b']

下面使用with方法

data3 = {'k1':123,'k2':456}

with open('c.pkl','wb') as str_p:

pickle.dump(data3,str_p)

with open('c.pkl','rb') as str_r:

a = pickle.load(str_r)

print(a)

#总结:dumps和dump,loads和load的区别

# dumps 只是将对象序列化

# dump 可以将对象序列化,并把序列化的对象保存到文件中

# loads 也只是将序列化的字符串反序列化

# load 可以将字符串从文件中读取出来,再反序列化

二.json

1.主要参数:

1)obj:将obj对象格式化并存储到文件对象中,文件必须为可写的文件句柄,json只产生str对象,

不支持bytes对象。

2)skipkey:如果为True,对象的基本类型必须是str,int,float,bool,Non

3)ensure_ascii = True:如果为true则所以传入的非ASCII字符都被转义,如果为False则字符将被原样输出。

4)check_circular=True:如果为true容器类型的循环引用检查将被跳过

5)indent=None:表述数组元素和对象将被按指定的值缩进,可以是整数或字符串’\t’

6)sort_keys=False:如果为True字典的输出将按键排序

2.json与pickle模块的区别:

1)json只能处理基本数据类型。

pickle能处理所有的Python的数据类型。

2)json用于各种语言之间的字符转换。

pickle用于python程序对象的持久化或者python程序对象的持久化或者python程序对象网络传输。

三.shelve模块

与pickle类似用来持久化数据的,不过shelve是以键值对的形式,将内存中的数据通过文件支持持久化,

值支持任何pickle支持的python数据格式,它会在目录下生成三个文件。

执行代码:

---------------------

import shelve

s = shelve.open('test_s.db')

s['k1'] = {'int':10,'float':8.8,'string':'python'}

s.close()

s = shelve.open('test_s.db')

print(s['k1'])

print(s['k1']['float'])

s.close()

执行结果

{'int': 10, 'float': 8.8, 'string': 'python'}

8.8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值