time模块 顾名思义就是时间模块 我们在之前就用过一些时间模块
比如你想要让打印的时间延迟就time.sleep()
首先我们知道这是一个时间操作的模块
它可以分为三种模式:时间戳模式、格式化时间模式、结构化时间模式
时间戳模式;
就是查看当前的时间的模式 一般是计算的时间差 这是精准的计算
import time print(time.time()) #时间戳模式 精准的时间计算
通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 就是从1970年的格林尼治时间来计算的
格式化时间 :其实就是像格式化类型一样输出时间 输出的是年月日
import time print(time.strftime('%Y-%m-%d')) # 2018-04-24 查看当前的年月日 print(time.strftime('%y-%m-%d')) # 18-04-24 也是查看当前时间只不过是不同的时间来查看的 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2018-04-24 15:47:15 这个是查看当前的具体的年月日时间
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 % %%号本身
结构化时间:
是以元组 的形式来把你所有的信息都放在元组内
import time #是以元组的形式来显示的 print(time.localtime()) # 本地结构化时间 print(time.gmtime()) # 英国的结构化时间 #本地的结构化时间比英国的结构化时间少8个小时 因为时区的差异
|
||||||||||||||||||||||||||||||||
时间戳 想要转化为格式化时间必须先转化为结构化时间再转化为想要的格式,就好比你UTF-8想转化为gbk必须要经过unicode
struck_time 是结构化时间 format_time是结构化时间 Timestamp是时间戳格式
这就是他们转化所需要的条件
时间搓转化为结构化 struct_time :
print(time.localtime(20004)) #通过localtime把时间搓20004本地的时区时间 print(time.gmtime(20004)) # 转化为英国时区
把格式化转化为结构化:
p = time.strptime('2015-5-15','%Y-%m-%d') #后面必须跟上指定的格式 print(p)
把结构化转化为格式化:
p = time.strptime('2015-5-15','%Y-%m-%d') #后面必须跟上指定的格式 print(time.strftime('%Y-%m-%d',p)) # 前面也必须加上特定的格式
时间搓转化为格式化必须要经过结构化
具体转化过程:
import time p = time.strptime('2015-5-15','%Y-%m-%d') #把2015-5-5转化为结构化 n =time.strftime('%Y-%m-%d',p) # 把结构化转化为格式化 # print(n) print(time.mktime(p)) # 直接把结构化转化为时间戳
还有%c的构造 他是%x 和 %X 的组合缩写 就是可以显示当前的年月日时分秒:
你也可以通过其他的来转化
%c 只能通过struct_time 结构化和时间搓来转化
时间戳和%c的区别
print(time.asctime()) # 是直接查找当前的时间和年月日 print(time.time()) # 是查找当前的时间 但是是以时间戳的形式来显示的
print(time.ctime()) print(time.strftime('%c')) #也可以指定格式来转化 转化为格式化形式的当前的具体时间
#结构化时间 --> %a %b %d %H:%M:%S %Y串 #time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串 >>>time.asctime(time.localtime(1500000000)) 'Fri Jul 14 10:40:00 2017' >>>time.asctime() 'Mon Jul 24 15:18:33 2017'
直接打印ctime() 和asctime()的显示都是一样的 因为源码显示都是不传入参数 默认传入当前时间的元组的
小练习:输入一个时间求出现在离你想求出的时间过去了多久
import time # 比起y-m-d h:M:S过去了多少年 多少月 多少天 多少h,多少m,多少s # 当前的时间 时间戳 # 过去的时间 转成时间戳 # 时间戳相减 # 相减之后的结果转成结构化时间 # 结构化时间 - 1970.1.1 0:0:0 # 你要相减的话你需要知道你相减的包括 时分秒 不止是奶奶月日 所以你需要转化为结构化来减 def trashy(fmt_time, fmt): now = time.time() # 求出现在时间的时间戳 # 下面把你的要进行相减的时间戳给算出来 time_before = time.mktime(time.strptime(fmt_time,fmt)) sub_time = now - time_before struct_time = time.gmtime(sub_time) return '过去了%d年%d月%d天%d小时%d分钟%d秒' % (struct_time.tm_year - 1970, struct_time.tm_mon - 1, struct_time.tm_mday - 1, struct_time.tm_hour, struct_time.tm_min, struct_time.tm_sec) ret = trashy('2018-4-23 10:30:20', '%Y-%m-%d %H:%M:%S') print(ret)
random模块 随机模块:
# import random # print(random.random()) # print(random.uniform(1,4)) #1-4之间的数字但是不包括1和4 # randit()是可以包括首尾的 # randrang()是顾头不顾尾部 还可以用步长来使用 # random.choice()#随机取其他的数字 就是抽一个 # sample()是随机抽取两个
import random print(random.random()) print(random.uniform(1,4)) # 生成一个1-4之间的数字 但是绝对取不到1和4 print(random.randint(1,1000)) #包含首尾 print(random.randint(1,2)) #包含1 2 print(random.randrange(1,2)) # 不包含尾部 也就是只能取前面的一个 但是你能传递数字 print(random.choice([1, '23', [4,5]])) #三个元素随机取 print(random.sample([1, '23', [4,5],],2)) # 只能取前面的一个元素 但是可以传递列表 item = [1, 3, 4, 5, 6] import random random.shuffle(item) #传递列表 print(item)
小练习:
# 要求 生成随机验证码
# 基础需求: 6位数字验证码 数字可以重复
# 进阶需求: 字母+数字 4位验证码 数字字母都可以重复
import random def id_code(num): ret = '' #设置等于空为了让下面的值来相加 for i in range(num): number = str(random.randint(0,9)) # 随机取到0-9的数字 转化为字符串为了下面好相加 alph_num = random.randint(97, 122) # 因为我们下面准备按照ASCII码来求值所以我需要这样设置 alph_num2 = random.randint(65, 90) alph = chr(alph_num) # 把num的值转化为ASCII码 alph2 = chr(alph_num2) choice = random.choice([number, alph, alph2]) ret += choice #把你得到的值相加 return ret print(id_code(6)) 进阶: import random def id_code(num): ret = ' ' for i in range(num): number = str(random.randint(0,9)) alph_num = random.randint(97,122) alph_num2 = random.randint(65, 90) alph = chr(alph_num) alph2 = chr(alph_num2) choice = random.choice([alph,alph2]) choice = random.choice([number, choice]) ret += choice return ret print(id_code(6))
发红包:
第二种:
sys模块:
# sys.argv 命令行参数List,第一个元素是程序本身路径
# sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
# sys.version 获取Python解释程序的版本信息
# sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
# sys.platform 返回操作系统平台名称
print('-'*6) # 因为上面的exit()已经把解释器给关闭了 所以就不会执行了
print(sys.version) #获取解释器的版本信息
print(sys.platform) # 查看你的windows版本信息 一般不准确
print(sys.path) # 系统的路径 导入sys模块的时候搜索的路径
print(sys.argv) # 得到一个列表 列表的第一项就是当前文件存储的位置
之前就用过sys模块
用sys.modules['__main__'] 求出当前文件的位置
sys模块还有一个很重要的模块 argv
直接用sys调用argv就是显示它的当前文件所在的路径的
一般都是通过电脑所自带的cmd来配合使用的
就是以脚本的形式 执行一个文件的时候可以加一些参数
#使用argv的时候你需要在 cmd 电脑的命令界面上输入python 加当前文件所在的位置 来进行文件判读 当前位置你也可以用print(sys.argv)来获取 if sys.argv[1] == 'alex' and sys.argv[2] == '3714': print('登陆成功') else: sys.exit()
使用exit() 来关闭程序的执行
user = input('>>').strip() pwd = input('>>>').strip() if user == 'laowang' and pwd =='9527': print(7777) else: sys.exit() #关闭解释器 print('我完成了功能')
下面我们可以用argv来查看你所输入的程序那里出错了没有‘
import sys import logging inp = sys.argv[1] if len(sys.argv) > 1 else 'WARNING' logging.basicConfig(level = getattr(logging, inp)) # 得到DEBUG num = int(input('>>>>')) logging.debug(num) a = num * 10 logging.debug(a) b = a - 10 logging.debug(b) c = b+5 print(c)