1 模块random
1.1 取随机小数
print(random.random()) # 取0-1之间的小数 print(random.uniform(2,4)) # 取2-4之间的小数
1.2 取随机整数
print(random.randint(1,2)) # [1,2] print(random.randrange(1,2)) #[1,2) print(random.randrange(1,5,2)) #[1,2)步距2
1.3 从一个列表中随机抽取值
p = [1,2,3,4,(5,6),(7,8)] print(random.choice(p)) #随机取一个值,可以重复 print(random.sample(p,2)) #随机取值,同时取得值不可以重复,第二个参数是取多少个值。如[3, (5, 6)]
1.4 打乱一个列表的顺序
#打乱一个列表的顺序,在原列表的基础上直接进行修改,节省空间
p = [1,2,3,4,(5,6),(7,8)] random.shuffle(p) print(p)
1.5 案例
1.5.1 案例1:
验证码 ,实现功能如下:
(1)4位数字验证码
法一:
for i in range(4): print(random.randint(0,9),end='')
法二:
s='' for i in range(4): num = random.randint(0,9) s += str(num) print(s)
(2)6位数字验证码
def suzi(n=6): s = '' for i in range(n): num = random.randint(0,9) s += str(num) return s print(suzi())
(3)6位数字+字母验证码
法一:
1 s = '' 2 3 for i in range(6): 4 5 num = str(random.randint(0, 9)) 6 7 alpha=chr(random.randint(65,90)) #chr()内置函数 8 9 alphA=chr(random.randint(97,122)) 10 11 res=random.choice([num,alphA,alpha]) #注意只能有一个参数 12 13 s += res 14 15 print(s)
法二:全能版
1 def ran(n,zimu=True): 2 s = '' 3 for i in range(6): 4 num = str(random.randint(0, 9)) 5 if zimu: 6 7 alpha=chr(random.randint(65,90)) #chr()内置函数 8 alphA=chr(random.randint(97,122)) 9 num=random.choice([num,alphA,alpha]) #注意只能有一个参数 10 s += num 11 return s 12 print(ran(6,zimu=False)) #第一个参数是二维码是几位,第二位参数默认有字母,若不添加字母则输入False
2 模块time时间
2.1 时间格式:
(1)格式化时间(字符串数据类型)
'2018-8-20' '2018.8.20' - 给人看的
%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 当前时区的名称 %% %号本身
(2)结构化时间(元组)
|
索引(Index) |
属性(Attribute) |
值(Values) |
|
0 |
tm_year(年) |
比如2011 |
|
1 |
tm_mon(月) |
1 - 12 |
|
2 |
tm_mday(日) |
1 - 31 |
|
3 |
tm_hour(时) |
0 - 23 |
|
4 |
tm_min(分) |
0 - 59 |
|
5 |
tm_sec(秒) |
0 - 60 |
|
6 |
tm_wday(weekday) |
0 - 6(0表示周一) |
|
7 |
tm_yday(一年中的第几天) |
1 - 366 |
|
8 |
tm_isdst(是否是夏令时) |
默认为0 |
(3) 时间戳时间(浮点型数据类型)---->只能取值不能修改
时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。 ,以s为单位 - 给机器计算用的
2.2 时间格式的转化

2.3 案列
import time #时间戳时间 print(time.time()) #1534755788.514118 #结构化时间 print(time.localtime()) #time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=17, tm_min=5, tm_sec=43, tm_wday=0, tm_yday=232, tm_isdst=0) print(time.localtime().tm_mon) #8 #格式化时间 print(time.strftime('%Y-%m-%d')) # str format time 2018-08-20 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2018-08-20 17:23:53 print(time.strftime('%c')) # Mon Aug 20 17:25:05 2018
1:查看一下2000000000时间戳的时间
re=time.localtime(2000000000) rt=time.strftime('%Y-%m-%d',re) print(rt)
2将2008-8-8转换成时间戳时间
re = time.strptime('2008-8-8','%Y-%m-%d') rs=time.mktime(re) print(rs)
3.请将当前时间的当前月1号的时间戳取出来
def tm(): re=time.localtime() rs=time.strptime('%s-%s-1'%(re.tm_year,re.tm_mon),'%Y-%m-%d') return time.mktime(rs) print(tm())
4.计算时间差 - 函数
# 2018-8-19 22:10:8 2018-8-20 11:07:3
# 经过了多少时分秒
st_tim1='2018-8-19 22:10:8' st_tim2='2018-8-20 11:07:3' str_tim1=time.strptime(st_tim1,'%Y-%m-%d %H:%M:%S') str_tim2=time.strptime(st_tim2,'%Y-%m-%d %H:%M:%S') str_stamp1=time.mktime(str_tim1) str_stamp2=time.mktime(str_tim2) stru=str_stamp2-str_stamp1 su = time.gmtime(stru) print("过去了%s年%s月%s日%s小时%s分钟%s秒"%(su.tm_year-1970,su.tm_mon-1,su.tm_mday-1,su.tm_hour,su.tm_min,su.tm_sec))
3 模块sys
功能:sys模块是与python解释器交互的一个接口
sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version 获取Python解释程序的版本信息
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.setrecursionlimit(5000) 设置递归的深度
3.1 sys.argv ---(接受终端命令行传入的参数)
import sys user = sys.argv[1] passwd = sys.argv[2] if user == 'alex' and passwd == 'alex123': print('登陆成功') else: exit()
执行---------》python 路径 参数1 参数2
sys.argv = ['python文件的路径','参数1','参数2','参数3'...]
文件名: 文件路径不能有中文 所有的文件名都应该符合变量命名规范
# 整个文件路径不能有空格 不支持中文
作用:
# 1. 程序员 运维人员 在命令行运行代码
# 2. 操作系统input事件 阻塞 退出了CPU的竞争
3.2 sys.path 模块搜索路径
-----》是一个列表,这个列表中存放的都是文件夹的绝对路径
作用:
一个模块能否被顺利的导入 全看sys.path下面有没有这个模块所在的
内置模块和第三方模块安装之后,不需要操作sys.path,直接用就行了
自定义模块的时候 导入模块的时候 ,如果一个模块导入不进来,那把这个模块的文件夹添加到sys.path中就行了(append())
print(sys.path)
['E:\\python\\代码\\模块\\random', 'E:\\python\\代码', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\pycharm\\PyCharm 2018.1.3\\helpers\\pycharm_matplotlib_backend']
3.3 sys.modules
------------所有被导入的模块的内存地址都存在sys.modules里
print(sys.modules) #是我们导入到内存中的所有模块的名字 : 这个模块的内存地址 print(sys.modules['re'].findall('\d+','a123')) sys.version
4 模块os
作用:
os模块是与操作系统交互的一个接口
4.1 文件操作类相关
os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息
4.2 系统操作相关
os.system("bash command") 运行shell命令,直接显示(执行字符串数据类型的 命令行代码) os.popen("bash command).read() 运行shell命令,获取执行结果(执行字符串数据类型的 命令行代码) os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.system('dir 路径') # 使用python语言直接执行操作系统的命令
os.listdir('路径') # 使用python语言的os模块提供的方法 间接调用了操作系统命令
# exec('字符串数据类型的python代码')
# eval('执行字符串数据类型的python代码')
# os.system('执行字符串数据类型的操作系统命令')
# os.popen('执行字符串数据类型的操作系统命令,并返回结果')
|
# os模块所做的事情 # 定制了很多方法 间接的帮助你去调用操作系统的命令 获得结果 # 然后帮助你分析整理成我们需要的数据类型的形态 # 你也可以os.popen/os.system直接取调用操作系统的命令 获得结果 # 但是 分析和整理的工作需要你自己做 # 用os模块的方法本身能够完成的功能我们就用定制好的方法就够了 # 如果有一天 你发现os模块定制好的功能解决不了我们的问题了 # 而刚好操作系统的命令能够很好地帮助我们解决问题 # 这个时候就用os.popen/os.system |
案例1:查看当前路径内容
os.'system('dir') # 执行操作系统的命令,没有返回值,----》查看的有乱码 下面的操作无乱码 # ret = os.popen('dir) # s =ret.read() # print(s) # print(s.split('\n'))#可以切割查看
案例2:查看指定路径内容
file_st = os.listdir('E:\python') print(file_st) for path in file_st: print(os.path.join('E:\python',path)) #E:\python\老男孩
案例3:获取当前工作路径
print('-->',os.getcwd()) # current work dir 当前工作目录
案例4:切换路径并查看该路径内容
os.chdir('E:\\') ret = os.popen('dir') s=ret.read() print(s)
4.3 路径相关
os.path
os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
os.path.sep 文件系统分隔符
4.3.1 案例:
4.3.1.1 案例1:os.path.abspath()
1:把路径中不符合规范的/ 改成操作系统默认的格式 path = os.path.abspath('D:/sylar/s15/day19/4.os模块.py') print(path) #D:\sylar\s15\day19\4.os模块.py 2:能够给能找到的相对路径改成绝对路径 #在本地路径的基础上加上文件名 path = os.path.abspath('4.os模块.py') print(path) #E:\python\代码\模块\20180821模块3\4.os模块.py
4.3.1.2 案例2 os.path.split、os.path.dirname、os.path.basename
1:把一个路径分成两段,第二段是一个文件/文件夹 path = os.path.split('D:/sylar/s15/day19/4.os模块.py') print(path) #('D:/sylar/s15/day19', '4.os模块.py') 2:获取分成两段的左右两段 path1 = os.path.dirname('D:/sylar/s15/day19/4.os模块.py') path2 = os.path.basename('D:/sylar/s15/day19/4.os模块.py') print(path1) #D:/sylar/s15/day19 print(path2) #4.os模块.py
4.3.1.3 案例3:判断文件是否存在os.path.exists
path = os.path.exists('D:/sylar/s15/day19/4.os模块.py') print(path) #False
4.3.1.4 案例4:判断是否是绝对路径os.path.isabs
path1 = os.path.isabs('D:/sylar/s15/day19/4.os模块.py') path2 = os.path.isabs('4.os模块.py') print(path1) #True print(path2) #False
4.3.1.5 案例5:判断是否是文件夹、文件
print(os.path.isdir(r'E:\python\代码\模块\20180821模块3\课堂.py')) #False print(os.path.isfile(r'E:\python\代码\模块\20180821模块3\课堂.py')) #True
4.3.1.6 案例6:拼接路径
path = os.path.join('D:/sylar/s15/day19/','4.os模块.py') print(path) #D:/sylar/s15/day19/4.os模块.py
4.3.1.7 案例7:判断文件大小
方法一:
size = os.path.getsize(r'E:\python\代码\20180821模块3\xx.py') print(size) #1846
方法二:
import os print(os.stat(r'E:\python\代码\20180907\xx.py').st_size)
4.3.1.8 案例8:判断文件夹的大小
1 1.1.1.4.1 方法一:递归 2 3 4 5 def func(path): #参数:要计算的文件夹 6 7 size_name = 0 8 9 name_lst = os.listdir(path) #查看该路径下内容 10 11 for i in name_lst: #遍历该路径下的内容 12 13 path_name = os.path.join(path,i) #转成绝对路径 14 15 if os.path.isdir(path_name): #如果是文件夹 16 17 size = func(path_name) 18 19 size_name += size 20 21 else: #如果是文件 22 23 size_name += os.path.getsize(path_name) 24 25 return size_name 26 27 print(func('E:\python\代码\模块')) 28 1.1.1.4.2 方法二:循环 29 30 循环(核心思想:堆栈;只要是文件就放到列表里) 31 32 lst = ['E:\python\代码\模块'] #列表的第一个目录就是我要统计的目录 33 size_name = 0 #此变量用于统计大小 34 while lst: 35 name = lst.pop() #弹出尾部的文件夹 36 name_lst = os.listdir(name) #列出弹出的文件夹下面的内容 37 for i in name_lst: #判断显示出的内容,遍历,如果是文件那么统计大小如果是文件夹就放在栈里,等待下次在弹出 38 path = os.path.join(name,i) 39 if os.path.isdir(path): 40 lst.append(path) 41 else: 42 size_name += os.path.getsize(path) 43 print(size_name)
4.3.1.9 案例9:修改文件名
1 # 修改文件名 2 import os 3 import shutil 4 5 # 方式一:缺陷:py2+win :报错 6 os.rename('a.txt', 'b.txt') 7 # 方式二: 8 shutil.move('b.text', 'c.text')
4.3.1.10 案例10:删除文件夹
1 # 删除文件夹 2 法一: 3 import shutil 4 #既能删除空文件夹又能删非空文件夹,能删单极或多级目录 5 shutil.rmtree(r'E:\python\老男孩\代码\网络编程\20180907\a') 6 法二: 7 import os 8 os.removedirs(r'E:\python\老男孩\代码\网络编程\20180907\a') #只能删除空文件夹
补充:
1 import os 2 print('当前进程:%s启动中...'% os.getpid()) 3 print(os.getpid()) #子进程 4 print(os.getppid()) #父进程
浙公网安备 33010602011771号