python基础——序列化与反序列化

一、什么是序列化和反序列化?

  • 我们把对象(或变量)从内存变成可存储或可传输的过程称之为序列化,在python中被称为picking;
  • 自定义的类的实例如何保存在一个文件中?如何从文件中读取数据,并让他们在内存中再次恢复成自己对应的类的实例?
  • 按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化;反之,从文件的字节回复到内存,就是反序列化;

二、为什么要序列化?

  • 持久化保持状态
  • 跨平台的数据交互

三、pickle模块

pickle模块是python专用的持久化模块,可以持久化包括自定义类在内的各种数据;只能在python程序之间进行数据交换;

方法:

dumps将对象序列化成bytes对象
dump对象序列化到文件对象,就是存入文件;
loads

从bytes对象反序列化;

load对象反序列化,从文件读取数据;

注意:在使用dump()序列化时候,打开文件必须要以wb模式,使用load()反序列化,打开文件必须以rb模式;

import pickle


class A:
	def __init__(self, name, age):
		self.name = name
		self.age = age

	def show(self):
		print("my name is {}, my age is {}".format(self.name, self.age))


a = A('tom', 18)
pickle.dump(a, open('ser', 'wb'))
a = pickle.load(open('ser', 'rb'))
a.show()
# 序列化和反序列化必须保证使用同一套类的定义,否则会带来不可预料的结果

四、Json与json模块

1、JSON

  • JSON:JavaScript Object Notation,JS对象标记,是一种轻量级的数据交换格式;
  • JSON是跨平台语言,所以只能对python的基本数据类型进行操作,无法识别python的类;

2、python的json模块

数据转换:

使用方法:

记忆方法:

  • 序列化,数据到文件,就dump;
  • 反序列化,文件到数据,就load;
  • 根据字符串转换就加s;
  • 从文件直接转就不加s;

写入与读取的实例:

一般来说json编码的数据很少落地,数据都是通过网络传输;传输的时候,就要考虑压缩它;本质来说它就是个文本,就是字符串;

import json
acc_dic={
    'id':1234,
    'password':'abc',
    'credit':15000,
    'balance':15000,
    'enroll_data':'2018-11-19',
    'expire_data':'2021-11-19',
    'pay_day':22,
    'status':0  # 0=normal,1=locked,2=disabled
}

# 写入到文件
with open('accounts/1234.json','w') as f:
    json.dump(acc_dic,f)

# 读取json文件
with open('accounts/1234.json','r') as f:
    data=json.load(f)
    print(data,type(data))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值