Python学习笔记(八)

一、对象持久化

(一)pickle 模块

1、概述

pickle模块为Python对象结构的序列化和反序列化实现了一个基本但强大的算法。 “Pickling”是将Python对象层次结构转换为字节流的过程,“unpickling”是相反的操作,即字节流转换回对象层次结构。

2、常用方法

(1)序列化为字符串
pickle.dumps(obj) 将对象序列化为字符串
pickle.loads(str) 将字符串反序列化为对象

import pickle

p = {"name":"Tom", "age":18}

# 对象序列化为字符串
str_p = pickle.dumps(p)
print(str_p)

# 字符串反序列化为对象
p_tmp = pickle.loads(str_p)
print(p_tmp)

(2)序列化到文件
pickle.dump(obj, file) 将对象序列化到文件
pickle.load(file) 将文件反序列化为对象

import pickle

p = {"name":"Tom", "age":18}

# 对象序列化到文件
pickle.dump(p, open("a.txt", "wb"))

# 文件反序列化为对象
p_tmp = pickle.load(open("a.txt", "rb"))
print(p_tmp)

(二)shelve 模块

1、概述

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

2、常用方法
(1)创建shelve文件
db = shelve.open('path')

(2)序列化到文件
db['key'] = obj

(3)序列化的对象数量
len(db)

(4)删除序列化内容
del db['key']

(三)对比 pickle 和 shelve

pickle一个文件只能很方便的序列一个对象,如果需要一个文件序列化多个对象的话使用shelve模块,因为shelve模块是k, v型的,可以更方便一个文件存储多个对象

二、字符串

(一)类型

  1. str               字符串
  2. bytes           字节
  3. bytearray    字节数组

(二)基础概念

名称概述
字符集又称为编码字符集,
是一个包含字符表中每一个字符和对应的整数映射关系的集合。
码位值一个字符在某个字符集中的映射的值,一般是一个整数。
字符编码是把一个码位值转换为用于存储和传输的2进制序列的方式。
编码转换字符为字节形式
解码字节形式转换为字符

(三)字符编码

1、ASCII

存储在一个Byte
0~127

2、latin-1

存储在一个Byte
128~255

3、UTF-8

可变字节
0~127:使用单字节
128~2047:双字节存储
大于 2047:3~4Byte

4、UTF-16

2Byte存储字符(另加2Byte作为标识)

5、UTF-32(4Byte)


(四)内置函数

1、ord():获取字符码值

print(ord('a'))  # 97

2、chr():获取码值对应的字符

print(chr(97))  # a

3、str.encode(‘编码’):将特定字符串编码

s = "abc"

print(s.encode("utf8"))

4、bytes.decode(‘编码’):将字符编码解码为字符文本

s = "abc"
b = s.encode("utf8")
print(b)

print(b.decode("utf8"))

(五)类型转换

1、转化为bytes
方法1: 手动声明 b""
方法2: 字符串编码 str.encode()
方法2: 构造函数 bytes()

2、转换为bytearray
构造函数: bytearray('字符串','字符编码')

3、转换为字符串
bytes.decode('字符编码')
bytearray.decode('字符编码')

(六)BOM 处理

1、简介

字节顺序标记(英语:byte-order mark,BOM)是一个有特殊含义的统一码字符,码点为U+FEFF。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。经常被用于区分是否为UTF编码。

2、使用(添加或不显示标记)
open('文件名','打开方式',encoding="字符编码-sig")

with open("a.txt", "w", encoding="utf-8-sig") as f:
	f.write("Hello world")

with open("a.txt", "r", encoding="utf-8-sig") as f:
	print(f.read())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值