logging模块补充,time模块
logging模块补充
1.如果执行文件不再项目根目录下,需要添加项目根目录到sys.path中
2.调用业务逻辑
import os,sys
sys.path.append(sys.path.dirname(sys.path.dirname(__file__)))
time模块
获取时间
import time
#浮点型的时间戳,从unix元年开始到现在的秒数
print(time.time()) #通常用来计算时间差,不会直接给用户来看
print(time.asctime()) #格林威治时间 格式
print(time.ctime()) #格林威治时间 格式
结构化时间(把时间拆开为不同部分)
print(time.localtime()) #获取本地时间
print(time.gmtime()) #世界时间 比中国晚了八个小时
从结构化时间转为时间戳
print(time.mktime(time.localtime()))
将结构化时间转为格式化字符串时间
print(time.strftime('%Y-%m-%d %H:%M:%S %p',time.localtime()))
结构化可以单独获取某一个,比如年份,月份
print(time.localtime().tm_year)
print(time.strptime('2019-01-23 10:46:44','%Y-%m-%d %H:%M:%S'))
datetime模块
获取当前时间,会根据时区自动转换
print(datetime.datetime.now())
创建datetime对象,指定时间
print(datetime.datetime(year=2019,month=1,day=23)) #year,month,day可以省略但是默认的输入顺序要是年月日
两个datetime可以进行减法运算,并且只能减
d1 = datetime.datetime(2019,1,23)
d2 = datetime.datetime(2019,1,24,10)
print(d2-d1)
可以单独获取某个部分
print(d2.hour)
时间差对象,表示30天
d1 = datetime.timedelta(days=30)
三十天以后是什么日子,时间差可以与datetime进行+或-
print(datetime.datetime.now() + d1)
两个时间差可以进行+ - /
d2 = datetime.timedelta(days=1)
d3 = datetime.timedelta(days=2)
print(d3 - d2)
random 随机数相关模块
计算机中的随机数都是伪随机
随机数都是通过一个算法根据一个种子数计算得来的
只要知道了种子数,随机数的结果就是固定的
默认是使用当前的时间戳作为种子数
一些方法:
print(random.random()) #从0 - 1不包含1和0
print(random.randint(1,2)) #闭闭 包含开始和结束
print(random.randrange(1,3)) #闭开 包含开始不包含结束
print(random.uniform(0,2)) #不包含1的随机浮点数
print(random.choice([1,2,3,4,5])) #从列表中随机选一个
print(random.sample([1,2,3,4,5],2)) #从列表中随机选出指定的个数
#打乱顺序,比如洗牌
li = [1,2,3,4,5,6]
random.shuffle(li)
print(li)
随机获取验证码
验证码都是数字和字母的组合
长度为4
import random
def get_auth_code(num):
res = ''
for i in range(num):
#随机一个大写
a = random.randint(65,90)
#随机一个小写
b = random.randint(97,122)
#随机挑一个
c = random.choice([a,b])
#随机0-9
d = random.randint(0,9)
#在数字和字符之间随机挑一个
e = random.choice([d,c])
if e > 9:
res += chr(e)
else:
res += str(e)
return res
print(get_auth_code(4))
sys模块
获取/添加 环境变量
print(sys.path)
获取调用解释器时传递的参数,第一个永远是执行文件本身
print(sys.argv)
立即退出解释器
状态码可以自定义,执行为0
sys.exit(0)
print(sys.modules) #查看已经加载的所有模块
print(sys.platform) #获取平台信息
print(sys.maxsize) #获取int最大值,在python中没有长度限制
print(sys.version) #获取解释器版本
pickle模块
pickle是一个序列化模块
序列化是指把一种数据类型转换成另一种数据类型,目的为了传输或存储数据
pickle模块序列化得到的数据只能被pickle来反序列化
如果你写的是一个单机程序,可以使用该模块
对于网络应用程序而言,需要一种任何语言平台都能识别的数据类型
这就是json和xml
相关函数
dump 将python数据类型转为字节
dump封装了write函数的调用
load是将字节转为python数据类型
load封装了read函数的调用
序列化的过程是从python数据类型转换为中间数据类型
dic = {'name':'virgil','age':20}
res = pickle.dumps(dic)
with open('db.pic','wb') as f:
f.write(res)
反序列化指的是从中间数据类型恢复到python数据类型
with open('db.pic','rb') as f:
data = pickle.loads(f.read())
print(type(data))