Python笔记
今天机器学习最大的收获:要具体,不要模(han)糊!python哲学中有这一项。
错误异常处理
错误类型
- 语法错误
- 语义错误
- 逻辑错误
异常处理
- try:有可能出现异常代码
- except异常类型as实例:捕获特定异常
- finally:不论是否遇到异常均会执行
- else:未遇到异常时执行
- raise:手动抛出异常
测试
测试级别
-
单元测试
- 对代码最基本单元(函数、方法)的测试
- 给予特定条件判断结果是否符合预期
- 相对整个程序的测试,单元测试简化了测试任务
- unittest模块
-
集成测试
-
系统测试
-
验收测试
-
回归测试
代码组织
-
断言
- assertEqual(值,表达式) 是否相等
- assertTrue() 是否为真
- assertIn( ) 是否包含
- assertAlmostEqual( ) 是否约等于
- assertIs( ) 是否为同引用
- assertIsNone( ) 是否为空
- assertIsInstance( ) 是否某类型实例
- assertGreater( ) 是否大于
- …
-
装置
- 测试用例类继承自 unittest.TestCase
- test_定义功能测试函数名
- setUp() 函数定义准备初始化代码
- tearDown( ) 函数执行清理工作
数值与日期
数值
- 格式化
- 小数位的处理
随机数
- random.choice() 序列中随机选择一个值
- random.sample() 获取指定数目的序列
- random.shuffle() 打乱顺序
- random.randint() 生成范围内的随机整数
- random.random() 生成随机浮点数
- random.getrandbits() 生成指定bit位数的随机数
日期时间
-
datetime
-
date
-
time
-
datetime
- year
- month
- day
- …
-
格式转换
-
字符串到日期时间 datetime.datetime.strptime(‘txt’ , '格式‘ )
-
日期时间到字符串 datetime.datetime.strftime( '格式’)
-
占位符
- %Y 四位年份
- %y 二位年份
- %m 二位月份
- %d 二位日期
- %H 二位小时
- %M 二位分钟
- %S 二位秒数
- %f 微妙
- %w 星期数,0…6
- …
-
-
时间差 timedelta
- days
- seconds
- hours
-
对象持久化
扁平文件
- 文本文件
pickle
-
pickle
-
序列化为字符串
- .dumps(obj) :将对象序列为字符串
- .load(s) :从字符串反序列化对象
-
序列化对象文件
- .dump(obj,file)
- .load(file)
-
shelve
-
shelve
- .open(‘dbfile’)
- .close()
- db[‘key’] = obj
- len(db)
- del db[‘key’]
数据库
ORM
字符串
概述
-
类型
- str 字符串
- bytes 字节
- bytearray 字节数组
-
字符编码架构
- 字符集:赋值一个编码到某个字符,以便在内存中表示
- 编码 Encoding:转换字符到原始字节形式
- 解码 Decoding: 依据编码名称转换原始字节到字符的过程
-
字符串存储
- 编码只作用于文件存储或中间媒介转换时
- 内存中总是存储解码以后的文本
字符编码
-
ASCII
- 存储在一个Byte 0-127
-
latin-1
- 存储在一个人Byte 128-255
-
UTF-8
-
可变字节
- 0-127 使用单字节
- 128-2047 双字节存储
-
2047 3-4Byte
- 每Byte使用 128-255
-
-
UTF-16
- 2 Byte存储字符 (另外2Byte作为标识)
-
UTF-32
- 4 Byte
内置函数
- ord() 获取字符代码点
- chr() 获取代码点对应字符
- str.encode(‘编码’) 将待定字符编码
- bytes.decode(‘编码’) 将字符编码解码为字符文本
类型转换
-
bytes
- 手动声明 b’ ’
- 字符串编码 str.encode()
- 构造函数 bytes()
-
bytearray
- bytearray(‘字符’,‘编码’)
- .decode() 解码为字符串
BOM 处理
- open(‘data.txt’,‘w|r’,encoding = ‘utf-8-sig’)
正则表达式
概述
-
概念
- Regular Expression
- 一种文本模式,描述在搜索文本时要匹配的一个或多个字符串
-
典型场景
- 数据验证
- 文本扫描
- 文本提取
- 文本替换
- 文本分割
-
语法
-
字面值
-
普通字符
-
需转义
- \
- ^
- $
- .
- |
- ?
-
-
- ()
- []
- {}
-
-
元字符
-
-
匹配
-
单字,预定义元字符
- . 除\n外的所有字符
- \d 数字,等同于[0-9]
- \D 非数字,等同于[^0-9]
- \s 空白字符 \t\n\r\f\v
- \S 非空白字符[^\t\n\r\f\v]
- \w 字母数字字符[a-zA-Z0-9_]
- \W 非字母数字[^a-zA-Z0-9_]
-
批量备选
- | yes|no
-
量词(字符、元字符,字符集如何重复)
-
? 0或1次
-
- 0或多次
-
- 1或多次
-
特定
- {n,m} 范围次数
- {n} n次
- {n,} 至少n次
-
-
贪婪与非贪婪
-
贪婪(默认):尽量匹配最大范围结果
-
非贪婪
-
尽量匹配最小的范围结果
-
方法:量词后追加 ?
-
例:
- ??
- *?
- +?
-
-
-
边界匹配
- ^ 行首
- $ 行尾
- \b 单词边界
- \B 非单词边界
- \A 输入开头
- \Z 输入结尾
- 注:或因上下文差异有不同表现
-
Python 正则
-
模块
- import re
-
RegexObject 正则对象
-
模式对象,表现编译后的正则表达式(编译为字节码并缓存)
-
编译
- re.compile(r’模式‘)
- re.compile(r’模式‘)
-
.findall()
- 查找所有非重叠匹配项
- 返回list
-
.match(string[,pos[,endpos]])
- 匹配,仅从起始位置
- 返回 MatchObject
-
.search(string[,[pos[,endpos]])
- 任意位置搜索
- 返回 MatchObject
-
.finditer()
- 查找所有匹配项
- 返回包括MatchObject元素的迭代器
-
-
MatchObject 匹配对象
-
表现被匹配的模式
-
.group()
- 参数为0或空返回整个匹配
- 有参时返回特定分组匹配细节
- 参数也可以是分组名称
-
.groups()
- 返回包含所有子分组的元组
-
.start()
- 返回特定分组的起始索引
-
.end()
- 返回特定分组的终止索引
-
.span()
- 返回特定分组的起止索引分组
-
.groupdict()
- 以字典表形式返回分组名及结果
- 以字典表形式返回分组名及结果
-
-
Group 编组
-
场景
- 从匹配模式中提取信息
- 创建子正则以应用量词
- 限制备选项范围
- 重用正则模式中提取的内容
-
声明
- (模式)
- (?P模式)
-
引用
- 匹配对象内 m.group(‘name’)
- 模式内 (?P=name)
- 表现内 \g
-
-
应用
-
字符串操作
-
.split(string,maxsplit=0)
- 分割字符串
-
.sub(repl,string,count=0)
- 替换字符串
-
.subn(repl,string,count=0)
- 替换并返回替换数量
- 替换并返回替换数量
-
-
编译标记
- 改变正则的默认行为
- re.I 忽略大小写
- re.M 匹配多行
- re.S 指定“.” 匹配所有字符,包括\n
- …
HJld19fX0E=,size_16,color_FFFFFF,t_70)
-
模块级别操作
- re.purge() 清理正则缓存
- re.escape() 逃逸字符
-
系统工具
概念
- 命令行工具
- Shell脚本
- 系统管理
系统模块
-
sys
- 提供一组功能映射Python运行时的操作系统
-
os
- 提供跨平台可移植的操作系统编程接口
- os.path 提供文件及目录工具的可移植编程接口
sys
-
平台与版本
- sys.platform
- sys.version
- sys.path
- sys.modules
-
观察异常细节
- sys.exc_info() 获取最后一次异常细节
- traceback.print_tb(sys.exc_info()[2])
-
命令行参数
- sys.argv
- sys.argv
-
标准流
- sys.stdin 标准输入流 默认等同于 iput()
- sys.stdout 标准输出流
- sys.stderr 标准错误流
os
-
shell变量
- os.environ
-
管理工具
- .getcwd()获取当前工作目录
- .listdir(path) 列举目录内容
- .chdir(path) 改变工作目录
- .getpid() 获取当前进程ID
- .getppid() 获取当前父进程ID
-
运行shell命令
- .system() Python脚本中运行shell命令
- .popen() 运行命令并连接输入输出流
-
文件处理
- .mkdir('目录名‘) 创建目录
- .rmdir('目录名’) 删除目录
- .rename(‘旧名’,‘新名’) 改名
- .remove('文件名‘) 删除文件
-
可移植工具
- .sep 分隔符
- .pathsep 路径分隔符
- .curdir 相对当前目录符号
- .pardir 相对上级目录符号
-
路径模块 .path
- .isdir(path) 是否目录
- .isfile(path) 是否文件
- .exits(path) 是否存在
- .split(path) 拆分路径
- .splitext(path) 拆分路径扩展名
- .join() 连接路径
博客做的熟练点了