对象持久化和字符串

对象持久化

所有程序运行的过程即使用编写的程序指令来调度运算特定数据,运算过程在内存中,内存并非永久性存储,当我们断电或关机后,内存中数据会丢失,当我们需要将某个状态存储,我们就会用到对象持久化。对象持久化有以下几种方式:扁平文件、pickle、shelve、数据库、DRM

1.扁平文件
使用文件将当前运行状态存储下来,这种方式容易出错,实际开发中不常用
eval( ):python 内置函数,可以将字符串转为python表达式

scores=[88,99,77,55]
def write_scores():
    with open('data_list.txt','w',encoding='utf8') as f:
    f.write(str(scores))
    print('文件写入完成')
def read_scores():
    with open('data_list.txt','r',encoding='utf8') as f:
    lst=eval(f.read())

2.pickle应用
在这里插入图片描述

import pickle
s=pickle.dumps(person)
p=pickle(s)
pickle.dump(person.open('pickle_db','wb'))
p=pickle.load(open('pickle_db','rb'))

3.shelve
可以将多个对象存入一个文件,并从文件中将多个对象分离出来

import shelve
scores=[99,88,77]
student={'name':'Mike','age':20}
db=shelve.open('shelve_student')   //声明一个数据库
db['s']=student
db['scores']=scores
>>>len(db)
2
>>>temp_student=db['s']
>>>temp_student
{'name':'Mike','age':20}
>>>db['scores']
[99,88,77]
>>>del db['scores']    //删除db中的scores一项

字符串

和字符串相关主要有三类,分别为str字符串、bytes字节、bytearray字节数组
在这里插入图片描述
乱码原因:编码和解码所用字符编码不同
字符编码结构:字符集:赋值一个编码到某个字符,以便在内存中表示
编码encoding:转换字符到原始字节形式
节码decoding:依据编码名称转换原始字节到字符的过程
字符串存储:编码值作用于文件存储或中间媒介转换时,内存中总是存储解码以后的文本。
在这里插入图片描述

字符串、字节、字节数组之间的转换

1.字符串与字节之间的转换
主要有三种方式:
手动声明:b’’
字符出编码:str.encode()
构造函数:bytes()

open('data.txt','rb').read()   //文件以二进制读取
b=b'abc'
s1='abc'
s1.encode('ASCII')
bytes('abc','ascii')

【注】字节不支持原位改变
2.字符串与字节数组之间的转换
bytearray(‘字符’,‘编码’)
bytearray.decode():解码为字符串

>>>s1='abc'
>>>ba=bytearry(s,'utf8')
>>>ba[0]
97
>>>ba[0]=98
>>>ba
bytearray(b'bbc')
>>>ba.decode('utf8')

【注】字节数组支持原位改变

BOM处理

BOM即byte order mark 字节顺序标识

open('data.txt','r',encoding='utf-8-sig').read()    //-sig表示文件中若有标记,忽略它
open('data.txt','w',encoding='utf-8-sig').write('abc')    //-sig表示写文件是加入字节标记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值