对象持久化
- 应用场景
序列化与反序列化:将当前正在计算的某个数据结果、进度或状态存储到某些物理没接上;未来在某一特定情境下将存储的数据还原到内存里去。 - 技术
- 扁平文件
- 文本文件
scores=[99,88,77,66] def write_score(): with open('datalist.txt','w',ecoding='utf8') as f: f.write(string(scores)) print('文件写入完成...') def read_score: with open('datalist.txt','r',ecoding='utf8') as f: lst=eval(f.read()) #将传递的字符串转换为python表达式 ```
- pickle
封装了一系列的方法接口,可以将python中原有的类型对象序列化为字符串或本地的文件
- 序列化为字符串
import pickle person={'name':'Tom','age':20} s=pickle.dumps(person) #将python类型序列化为字节字符串 p=picle.loads(s) #从字符串反序列化对象(保留类型特征)
- 序列化对象到文件
pickle.dump(person,open('pickle_db','wb')) #.dump(obj,file) p=pickle.load(open('pickle_db','rb')) #.load(file)
-
shelve - 特征:将多个对象存储到一个文件中,用类似字典表的形式用键值来访问不同的对象
import shelve scores=[99,88,77] student={'name':'Tom','age':20} db=shelve.open('shelve_student') db['s']=student db['scores']=scores # 调用 db['s'] # 删除文件 del db['scores']
-
数据库
-
ORM
字符串
- 概述
- 类型
- str 字符串
- bytes 字节
- bytearray 字节数组
- 字符编码架构
- 字符集:赋值一个编码到某个字符,以便在内存中表示
- 编码 Encoding: 转换字符到原始字节形式
- 解码 Decoding: 依据编码名称转换原始字节到字符的过程
- 字符串存储
- 编码只作用于存储或中间媒介转换时
- 内存中总是存储解码以后的文本
- 类型
- 字符编码
- ASCII码 美国标准信息交换代码(数字/字母/标点/换行…)
存储在一个byte 0-127 - Latin-1
存储在一个byte 128-255 - UTF-8 保证兼容性的同时最大程度减小存储体积
可变字节:0-127使用单字节,128-2047 双字节存储,>2047 3-4byte - UTF-16
2 byte 存储字符(另加2byte作为标识) - UTF-32
4 byte
- ASCII码 美国标准信息交换代码(数字/字母/标点/换行…)
- 内置函数
- ord(‘A’) > 65 获取字符代码点
- chr(104) > h 获取当前代码点对应的字符
- str.encode(‘编码’) 将特定字符编码
- bytes.decode(‘编码’) 将字符编码解码为字符文本
- sys.getdefaultencoding() 查看系统默认编码格式
- 类型转换
- bytes
手动声明 b’ ’
字符串编码 str.encode()
构造函数 bytes(str,‘编码’) 将字符串转换为编码(不能超过256,默认情况下只处理一个字节) - bytearray - 可以运用list的类似性质
bytearray(‘字节’,‘编码’)
.decode() 解码为字符串
- bytes
- BOM处理 字节顺序标记
open(‘data.txt’,‘r|w’,encoding=‘utf-8-sig’)