昨日回顾
1.规范目录结构
是为了更好的管理代码文件
提高项目的维护性和可读性
bin 执行文件
core 业务逻辑
conf 配置
db 数据处理相关的
lib 公共代码和第三方模块
log 日志文件
readme 软件的说明文档
如果执行文件不在项目根目录 需要添加项目根目录到sys.path
调用业务逻辑
2.logging模块
程序日志是 什么时间发生了什么事情 以及当时的情况
不是用logging的话 记录日志的流程
1定义一条日志信息
指定日志的标识符(即级别),方便后续查看日志
2为其指定显示格式
3输出到文件或者控制台
LOGGING模块使用不同对象来完成上述几个步骤
logger完成第一步 生成一个日志,并指定级别
多出来filter用于 过滤日志(面向对象)
formatter完成第二步
handler完成第三部
如果每次获取的生成器如果已经存在,则不会创建新的 直接将之前的给你
今日回顾
1.time模块
用户处理时间相关
1.获取时间
2.不同格式的时间转换
3sleep函数
import time
#浮点型的时间戳 从unix元年开始到现在的秒数
print(time.time())#通常用于计算时间差 不会直接给用户看
#美国的显示格式
print(time.asctime())#格林威治时间 格式
print(time.ctime())#格林威治时间 格式
#都是结构化时间(把时间拆开为不同部分)
print(time.gmtime())#世界时间 比中国时间晚了8小时
print(time.localtime())#获取本地时间
#从结构化时间转为时间戳
print(time.mktime(time.localtime()))
#将格式时间转为格式化字符串时间
print(time.strftime(%Y-%m-%d %H:%M:%S,time.localtime()))
#结构化时间 可以单独获取某一个 比如年份 月月
print(time.localtime().tm_year)
#从字符串转为结构话
print(time.strptime('20109-01-23 10:48:22','%Y-%m-%d %H:%M:%S'))
2.datetime模块
#获取当前时间 会根据时间自动转换
print(datetime.datetime.now())
#创建datetime对象 指定时间
print(datetime.datetime.(year=2019,month=1,day=23))
#两个datetime可以进行减法运算 并且只能减
d1=datetime.datetime.(year=2019,month=1,day=23)
d2=datetime.datetime.(year=2019,month=1,day=24)
print(d2-d1)
#可以单独获取某个部分
print(d2.hour)
#时间差对象 表示30天
import datetime
dl=datetime.timedelta(days=30)
#三十天以后是什么日子 时间差可以与datetime进行+或者-
print(datetime.datetime.now()+dl)
#时间差对象 表示30天
import datetime
dl=datetime.timedelta(days=30)
#三十天以后是什么日子 时间差可以与datetime进行+或者-
print(datetime.datetime.now()+dl)
#两个时间差可以进行加减除
d1=datetime.timedelta(days=30)
d2=datetime.timedelta(days=30)
print(d2-d1)
3.random模块
random 随机数相关模块
计算机中的随机数都是伪随机
随机数是通过一个算法根据一个种子数得来的
只要知道了种子数 随机数的结果就是固定的
默认是使用当前的时间戳作为种子数
# (0,1) 不包含1和0
print(random.random())
#既包含开始也包含结束 整形
print(random.randint(1,10))
#闭开 包含开始不包含结束
print(random.randrange(1,10))
#闭开 包含开始不包含结束
print(random.randrange(1,10))
# 不包含1的随机浮点数
print(random.uniform(0,1))
#choice 充列表中随机选一个
print(random.choice([1,2,3]))
#从列表中随机选择指定个数
print(random.sample([1,2,3,4,5],2))
#打乱顺序 (洗牌)
l=[1,2,3,4,5]
random.shuffle(l)
print(l)
随机生成验证码
4.sys
system 代表的不是操作系统 二是解释器自己
#获取\添加环境变量
print(sys.path)
#获取调用解释器时传递的参数 第一个永远是执行文件的本身
print(sys.argv)
#立即退出解释器
# 状态码可以自定义,执行成功为0
# sys.exit(0)
#查看已经加载的模块
print(sys.modules)
#查看当前的平台
print(sys.platform)
#当前整数可以保存的最大值
print(sys.maxsize)获取int最大值 在python中没有长度限制
#获得解释器版本
print(sys.version)
5.pickle
是一个序列化模块
序列化指的是把一种数据类型转换成另一种数据类型, 目的是为了传输和存储数据
pickle 模块序列化得到的制备能pickle来反序列
若果你写的是一个单机程序 可以使用该模块
对于网络应用而言, 我们需要一种任何语言平台都能是被的数据类型
这就是json xml
dumps是将python数据类型转为自己诶
dunp 封装了write函数的调用
loads 是将字节转为python类型
load封装了read函数的用掉
#序列化过程 就是从python数据类型转换为中间类型
dic={'name':'egon','age':10}
res=pickle.decode_long(dic)
with open('xxx','wb') as f
f.write(res)
with open('xxx','wb') as f
pickle.dump()
# 反序列化 指的是中间数据类型 恢复到python数据类型
with open('xxx','rb') as f :
date=pickle.loads(f.read())
print(date)