常用模块--random模块,time模块,os 模块,sys模块
什么是模块?
常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.Py的后缀。
但其实import加载的模块分为四个通用的类别:
1 使用python编写的代码
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包、
4 使用C编写并链接到python解释器的内置模块
一 random模块
1 去随机小数:数学计算 2 print(random.randint()) 取0-1之间的小数 3 print(random.randint(1,2)) [1,2] 4 5 6 7 取随机整数:彩票 抽奖 8 print(random.randint(1,2)) [1,2] 9 print(radom.randrange(1,2)) [1,2) 10 print(random.randrange(1,200,2)) 1-200之间 每两个取一个 11 12 13 从一个列表中随机抽取值:抽奖 14 s=['a','b',(1,2,3),456] 15 print(random.choice(s)) 16 17 print(random.sample(s,2)) 从s列表中随机抽取一次两个数
1 打乱一个列表的顺序,在原列表的基础上直接进行修改,节省空间 2 3 洗牌 4 s=('a','b',(1,2,3,4),456) 5 random.shuffle(s) 6 print(s) 7 8 9 10 验证码 --练习 11 4位数字的验证码 12 6位数字的验证码 13 6位数字+字母验证码 14 15 16 #4位数字的验证码 17 s=" " 18 for i in range(4): 19 num=random.randint(0,9) 20 s +=str(num) 21 print(s) 22 23 24 #6位数字的验证码 25 s="" 26 for i in range(6): 27 num=random.randint(0,9) 28 s += str(num) 29 print(s) 30 31 函数版本 32 def code(n): 33 for i in range(n): 34 num=randiom.randint(0,9) 35 s +=num 36 return s 37 ret=code(6) 38 print(ret) 39 40 #6位数字和字母的验证码 41 s="" 42 for i in rang(6) 43 num=str(random.randint(0,9)) 44 alpha_upper=chr(random.randint(65,90)) 45 alpha_lower=char(random.randint(97,122)) 46 res=random.choice([num,alpha_upper,alpha_lower]) 47 s+=res 48 print(s) 49 50 51 函数版本的组合(4位数字验证码,6位数字验证码,6位数字和字母验证码) 52 基本设计 53 def code(n=6,alpha=True): 默认参数是6 54 s='' 55 for i in range(n): 56 if alpha: 57 num=str(random.randint(0,9)) 58 alpha_upper=chr(random.randint(65,90)) 59 alpha_lower=chr(random.randint(97,122)) 60 res=random.chioce([num,alpha_upper,alpha_lower]) 61 s +=res 62 else: 63 num=random.randint(0,9) 64 s +=str(num) 65 return s 66 print(code(4)) 67 pritn(code()) 68 69 70 71 函数版本简化(代码简洁) 72 def code(n=6,alpha=True): 73 s=‘’ 74 for i in range(n): 75 num=str(random.randint(0,9)) 76 if alpha: 77 num=str(random.randint(0,9)) 78 alpha_upper=random.randint(65,90) 79 alpha_lower=random.randint(97,122) 80 num=random.choice([num,alpha_upper,alpha_lower]) 数字,小写大写字母取一个 81 s +=num 82 return s 83 print(code(4,False)) 84 print(code(alpha=False) 85 86 87 88 89 90 91 92 93
二 时间模块(time)(时间模块主要是跟时间打交道的)
1 时间格式
(1)格式化时间
‘2018-8-20’ '2018.8.20' 字符串数据类型 格式化时间是给人看的
1 print(time.strftime(‘%Y-%m-%d %H:%M:%S’)) str format time 2 大写的年份:如 2018-8-20 3 4 print(time.strftime("%y-%m-%d %H:%M:%S')) 5 小写的年份:如 18.8.20 6 7 print(time.strftime('%c')
(2)结构化时间
1534732642.617272 浮点型的数据类型,以秒为单位,给机器计算用的
结构化时间以伦敦的1970 1 1 0:0:0
1 struct_time=time.localtime() 北京时间 2 print(struct_time) 3 print(struct_time.tm_mon) 寻找结构化时间中的月份
(3)时间戳时间
print(time.time())
(4) 不同类型的时间之间的转换
1 print(time.time()) 2 3 struct_time=time.localtime(1500000000) 先转为结构化时间 4 print(time.gmtime(1500000000)) gmtime是伦敦时间 5 6 ret=time.strftime('%Y-%m-%d %H:%M:%S',struct_time) 从结构化时间转为字符串时间 7 print(ret)
1 如:2018-8-20 2 struct_time=time.strptime('2018-8-20','%Y-%m-%d') 3 res=time.mktime(struct_time) 4 print(res)
1 1 查看一下2000000000时间戳时间表示的年月日 2 struct_time=time.localtime(2000000000) 3 res=time.strftime('%Y-%m-%d',struct_time) 4 print(res) 5 6 7 2 将2008-8-8转换成时间戳时间 8 struct_time=time.strptime('2018-8-8','%Y-%m-%d') 9 print(time.mktime(struce_time)) 10 11 12 3 将当前时间的当前月1号的时间戳时间取出来 ---用函数 (先找到字符串时间 在转时间戳) 13 2018-8-8 14 def get_time(): 15 st=time.localtime() 16 str2=time.strptime('%s-%s-1' %(st.tm_year,st.tm_mon),'%Y-%m-%d') 格式化时间----结构化时间 17 return time.mktime(st2) 结构化时间转时间戳 18 print(get_time) 19 20 21 4 计算时间差--函数 22 2018-8-19 22:10:8 2018-8-20 11:07:3 23 经过了多少时分秒 24 25 str_time1='2018-8-19 22:10:8 ' 26 str_time2='2018-8-19 11:07:3 ' 27 struct_t1=time.strptime(str_time1,'%Y-%m-%d') 28 struct_t2=time.strptime(str_time2,'%Y-%m-%d') 29 re1=time.mktime(struct_t1) 30 re2=time.mktime(struct_t2) 31 sub_time=re2-re1 32 gm_time=time.gmtime(sub_time) 33 #1970-1-1 00:00:00 34 print('过去了%d年%d月%d小时%d分钟%d秒‘ %(gm_time.tm_year-1970,gm_time.tm_mon-1,gm_time.tm_mday-1,gm_time.tm_hour-0,gm_time.tm_min-0,gm_time.tm_sec-0)
1 1 查看一下2000000000时间戳时间表示的年月日 2 struct_time=time.localtime(2000000000) 3 res=time.strftime('%Y-%m-%d',struct_time) 4 print(res) 5 6 7 2 将2008-8-8转换成时间戳时间 8 struct_time=time.strptime('2018-8-8','%Y-%m-%d') 9 print(time.mktime(struce_time)) 10 11 12 3 将当前时间的当前月1号的时间戳时间取出来 ---用函数 (先找到字符串时间 在转时间戳) 13 2018-8-8 14 def get_time(): 15 st=time.localtime() 16 str2=time.strptime('%s-%s-1' %(st.tm_year,st.tm_mon),'%Y-%m-%d') 格式化时间----结构化时间 17 return time.mktime(st2) 结构化时间转时间戳 18 print(get_time) 19 20 21 4 计算时间差--函数 22 2018-8-19 22:10:8 2018-8-20 11:07:3 23 经过了多少时分秒 24 25 str_time1='2018-8-19 22:10:8 ' 26 str_time2='2018-8-19 11:07:3 ' 27 struct_t1=time.strptime(str_time1,'%Y-%m-%d') 28 struct_t2=time.strptime(str_time2,'%Y-%m-%d') 29 re1=time.mktime(struct_t1) 30 re2=time.mktime(struct_t2) 31 sub_time=re2-re1 32 gm_time=time.gmtime(sub_time) 33 #1970-1-1 00:00:00 34 print('过去了%d年%d月%d小时%d分钟%d秒‘ %(gm_time.tm_year-1970,gm_time.tm_mon-1,gm_time.tm_mday-1,gm_time.tm_hour-0,gm_time.tm_min-0,gm_time.tm_sec-0)
三 sys模块
(1)sys.argv
1 sys是跟python解释器打交道的
2 sys.argv
print(sys.argv) argv 的第一个参数是pyton这个命令后面的值
1 user=input('username') 2 pwd=input('password') 3 user=sys.argv[1] 4 pwd=sys.argv[2] 5 if user=='alex' and pwd=='alex1111' 6 print('登录成功') 7 else: 8 print('登录失败') 或者直接退出 (exit())
3 为什么要使用sys.argv?
(1)程序员 运维人员 在命令运行代码
(2)操作系统input事件 阻塞 退出了cpu的竞争
(2) sys.path
模块是存在硬盘上的,但是在使用的时候Import ---》 这个模块才到内存中
(3)sys.modules
四 os 模块
(1)os 模块是和操作系统交互的模块
1 os.makedirs('dis1/dis2') 可生成多层递归函数 2 os.removedirs('dis1') 若目录为空,则删除,则递归到上一级目录,若也为空,则删除,依此类推 3 os.mkdir('dis1') 生成单极目录 4 os.rmdir('dir1') 删除单极空目录,若目录不为空,则无法删除,报错 5 os.remove()删除一个文件 6 os.rename('oldname','newname') 7 os.stat('path/filename') 获取文件/目录信息 8 os.system("bash command") 运行shell命令,直接显示 9 os.popen("bash command).read() 运行shell命令,获取执行结果 10 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 11 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd 12 13 14 os.path 15 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 16 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 17 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 18 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 19 os.path.isabs(path) 如果path是绝对路径,返回True 20 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 21 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 22 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 23 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 24 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 25 os.path.getsize(path) 返回path的大小