python 序列化模块_python 序列化模块

本文详细介绍了Python中的序列化模块,包括json、pickle和shelve。json模块支持数字、字符串、列表、字典等基本数据类型的序列化和反序列化,适合跨语言交互;pickle模块则能处理Python所有数据类型,但不通用;shelve模块操作简单,适用于简单的数据存储。文中还展示了各模块的具体用法,如dumps()、loads()、dump()、load()等方法的示例。
摘要由CSDN通过智能技术生成

一、介绍

1、分类

序列化:

数据类型->字符串

反序列化

字符串->数据类型

2、作用

文件传输和文件储存需要将数据类型转换成字符串

二、序列号模块分类

1、json

优点:编程语言中的英语,同用语言

缺点:数据类型少:数字、字符串、列表、字典、元祖(通过列表进行的)

2、pickle

优点:python的所有数据类型

缺点:不通用,只能在python中使用

3、shelve

优点:操作简单,只要使用序列化句柄操作即可

缺点:不成熟

三、json模块

1、dumps() 和 loads() 方法

importjson

dic= {'k1': 'v1'}"""dic->str,使用dumps()方法,在内存中序列化

str->dic,使用loads()方法,在内存中反序列化"""str_d=json.dumps(dic)print(str_d, type(str_d))

dic_d=json.loads(str_d)print(dic_d, type(type))"""结果:

{"k1": "v1"}

{'k1': 'v1'} """

2、dump() 和 load() 方法

importjson

dic= {'k1': 'v1'}"""json.dump(数据, 文件),序列化

json.load(文件),反序列化"""with open(file='abc', mode='w', encoding='utf-8') as f1:

json.dump(dic, f1)

with open(file='abc', mode='r', encoding='utf-8') as f1:

ret=json.load(f1)print(ret, type(ret)) #{'k1': 'v1'}

3、在文件中,一行一行序列化,一行一行反序列化,必须用dumps()和loads()方法

importjson

li= [{'k1': 'v1'}, {'k2': 'v2'}, {'k3': 'v3'}]

new_li=[]"""1.使用dumps()方法,li->str,并写入文件-逐行写入

2.使用loads()方法,str->li,并读取文件-逐行读取"""f= open('cv', mode='w', encoding='utf-8')for i inli:

s=json.dumps(i)

f.write(s+ '\n')

f.close()

f1= open('cv', mode='r', encoding='utf-8')for line inf1:

s0=json.loads(line.strip())

new_li.append(s0)print(li)

f.close()

ensure_ascii 默认参数为 False时,可以写中文

四、pickle模块

1、用法和json模块相似

2、区别

1)在使用dump()和load()方法,序列化和反序列化时,文件的mode要加b

2)在使用dump()和load()方法时,文件可以逐行序列化和反序列化,json不可以

importpickleimporttime

s_time1= time.localtime(1000000000)

s_time2= time.localtime(2000000000)

f= open('pickle_file1', 'wb')

pickle.dump(s_time1, f)

pickle.dump(s_time2, f)

f.close()

f= open('pickle_file1', 'rb')

s_time1=pickle.load(f)

s_time2=pickle.load(f)print(s_time1.tm_year)print(s_time2.tm_year)

f.close()

五、shelve模块

不常用

importshelve

f= shelve.open('shelve_file')

f['key'] = {'int': 10, 'float': 9.5, 'string': 'Sample data'} #直接对文件句柄操作,就可以存入数据

f.close()

f1= shelve.open('shelve_file')

existing= f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错

f1.close()print(existing)

ps:涉及到反序列化的问题,用双引号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值