python建立数据库并序列化_python序列化

python中存在三种序列化的方案(数据存储)

在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成方便存储和传输的数据格式. 这个过程叫序列化. 不同的序列化, 结果也不同. 但是目的是一样的. 都是为了存储和传输

1. pickle. 可以将我们python中的任意数据类型转化成bytes并写入到文件中.  同样也可以把文件中写好的bytes转换回我们python的数据. 这个过程被称为反序列化

2. shelve. 简单另类的⼀一种序列化的方案. 有点儿类似后面我们学到的redis. 可以作为一种小型的数据库来使用

3. json. 将python中常见的字典, 列表转化成字符. 是目前前后端数据交互使用频率最高的一种数据格式.

import pickle

可以将对象写入到文件中

#基本用法

# pickle.dump(obj, file, protocol=None, *, fix_imports=True)  可以写入到文本中()

# pickle.dumps(obj, protocol=None, *, fix_imports=True)  一般用于正常的操作

# pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict") 可以从文本加载

# pickle.loads(s, *, fix_imports=True, encoding="ASCII", errors="strict")  一般用于正常的操作classCat:

def__init__(self,name):

self.name = name

defEatting(self):

print('I want to eat a mouse')

# pickle.dump(obj, file, protocol=None, *, fix_imports=True)可以写入到文本中()

# pickle.dumps(obj, protocol=None, *, fix_imports=True)  一般用于正常的操作

# pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict") 可以从文本加载

# pickle.loads(s, *, fix_imports=True, encoding="ASCII", errors="strict")  一般用于正常的操作BlueCat = Cat('BlueCat')

BlueCat1 = Cat('BlueCat1')

BlueCat2= Cat('BlueCat2')

BlueCat3 = Cat('BlueCat3')

# S1 = pickle.dumps(BlueCat)#序列化一个对象,将对象转化成bytes的形式

# print(type(S1))#

# S2 = pickle.loads(S1)  #进行反序列化,将bytes 转化为对象

# print(type(S2))#

# S2.Eatting()#I want to eat a mouse

#gg = [BlueCat1,BlueCat2,BlueCat3]

pickle.dump(gg,open('da','wb')) #写入将对象以列表的形式通过pickle 转化为bytes的形式写入到文件,原因是防止取对象的时候,当对象被拿完了,再拿就会报错hh = pickle.load(open('da','rb'))#从文本中读取,将bytes的形式转化为列表fori inhh:

print(type(i)) #》》 第一次print(i.name) #BlueCat1》》 第一次

简版的登录程序:

classUser:

def__init__(self,name,password):

self.name  = name

self.password = password

classclient:

defregist(self):

print('开始注册用户:')

uname = input('请输入你的用户名:')

upwd = input('请输入你的密码:')

UTemp = User(uname,upwd)

withopen('userinfo','ab') asf:

pickle.dump(UTemp,f)

print('注册成功')

deflogin(self):

print('******登录******')

uname = input('请输入你的用户名:')

upwd = input('请输入你的密码:')

withopen('userinfo','rb') asf :

while1:

try:

dd = pickle.load(f)

ifdd.name == uname anddd.password == upwd:

print('登录成功!!!')

break

exceptException ase:

print('登录失败!!!')

break#a = client()

a.regist()

a.regist()

a.regist()

a.regist()

a.login()

import shelve

shelve提供python的持久化操作. 什么叫持久化操作呢? 说白话,就是把数据写到硬盘上.在操作shelve的时候非常的像操作一个字典,相当于文件类型的字典

importshelve#shelve.open(filename, flag='c', protocol=None, writeback=False)

gg = shelve.open('haha',writeback=True)

gg['name'] = 'cisco'gg['hobby'] = [1,2,3,4,5,6,7,8,9,0]for a,b ingg.items():print(a,b)

gg['hobby'][0] = 99

for a,b ingg.items():print(a,b)

import json

json全称javascript object notation,是我们前后端交互的枢纽

importjson#json.dumps()#把字典转换成json字符串#json.loads()#把json字符串转化成字典#json.dump()#把字典转换成json字符串.写入到文件#json.load()#把文件中的json字符串读取.转化成字典

dic = {'输出':'鲁班','坦克':'项羽','法师':'安琪拉了'}

gg= json.dumps(dic,ensure_ascii=False) #ensure_ascii=False,是能够看到中文

print(gg)#{"输出": "鲁班", "坦克": "项羽", "法师": "安琪拉了"}

print(type(gg))#

bb= '{"输出": "鲁班", "坦克": "项羽", "法师": "安琪拉"}'gg=json.loads(bb)print(gg)#{'输出': '鲁班', '坦克': '项羽', '法师': '安琪拉'}

print(type(gg))#

gg = json.dump(dic,open('json.data','w',encoding='utf-8'),indent=4,ensure_ascii=False)print(gg)#None # ensure_ascii=False 保存到文件的时候不使用ascii 编码

print(type(gg))#

dd= json.load(open('json.data','r',encoding='utf-8'))print(type(dd))#

print(dd)#{'输出': '鲁班', '坦克': '项羽', '法师': '安琪拉了'}

#将一个类的属性保存到json中

classPerson:def __init__(self,name,func):

self.name=name

self.func=func#ensure_ascii=True 保存到文件的时候不使用ascii 编码

a = Person('鲁班','射手')#方案1,通过类的特殊方法

dd = json.dumps(a.__dict__,ensure_ascii=False)print(dd)#方案2,通过自己建立转换模板

defgg(obj):print('哈哈')return {'kk':obj.name,'fn':obj.func}#hh = json.dumps(a,default=gg,ensure_ascii=False) #{"kk": "鲁班", "fn": "射手"}

print(hh)

#将jsonz字符串转换为对象

defgg(dic):return Person(dic['kk'],dic['fn'])

a= '{"kk": "鲁班", "fn": "射手"}'

print(json.loads(a,object_hook=gg))

hh= json.loads(a,object_hook=gg)print(hh.name)

default = 把对象转化成字典. 需要自己写转换过程

object_hook = 把字典转化成对象. 需要自己写转换过程

configparser模块

该模块适用于配置⽂文件的格式与windows ini文件类似,可以包含一个或多个节(section)每个节可以有多个参数(键=值)

importconfigparser

gg = configparser.ConfigParser()#对文件进行初始化gg['DEFAULT'] = {'NAME':'panzhenwei.com'}#gg['Server1'] = {'IPADDR':'192.168.10.25','

MASK':'255.255.255.0',

'DAFAULTGATE':'192.168.10.1'}

gg['Server2'] = {'IPADDR':'192.168.10.26','

MASK':'255.255.255.0',

'DAFAULTGATE':'192.168.10.1'}

gg['Server3'] = {'IPADDR':'192.168.10.27','

MASK':'255.255.255.0',

'DAFAULTGATE':'192.168.10.1'}

gg['Server4'] = {'IPADDR':'192.168.10.28','

MASK':'255.255.255.0',

'DAFAULTGATE':'192.168.10.1'}

withopen('bb.txt','w') asf :

gg.write(f)#写入文件

对文件进行读取和修改

gg = configparser.ConfigParser()#对文件进行初始化gg.read('bb.txt')#直接写读取的文件名fori ingg:

print(i)

print(type(i))

结果:

fori ingg['DEFAULT']:

print(i)#name

可以向字典一样进行增删改查,但是都是在内存上修改的,保存如下:

gg.write(open("bb.txt", mode="w"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值