一、常用模块rendom
什么叫模块? import time time这样的就叫模块
模块都是C写的,所有的模块当中也是一对代码,这一对代码引入以后就可以直接使用
模块的分类
1、random模块 (随机函数)
随机的规则:在某一个范围中能够抽到每一个值的概率都是相同的
import random ret=random.random() #0~1之间的随机数 print(ret) # 100-200之间的随机整数 ret2 = random.randint(100,200) #-->randint取随机整数,左右都是闭区间【】 print(ret2) ret3 = random.randrange(100,200,50) #randrange(start,end,end) print(ret3) lst = [1,2,3,4,5,6,7] random.shuffle(lst) #shuffle随机打乱列表内的元素,常用于扑克牌洗牌 print(lst) ret4 = random.choices([1,2,'zx',[1,2,3]]) #随机取一个值 print(ret4) ret5 = random.sample([1,2,'alex',[1,2,3]],20) #随机取多个值 print(ret5)
2、正则表达式
正则表达式 : 只和字符串打交道 # 第一: 从一大段文字中,获取符合条件的内容 # 爬虫 # 第二: 检测某一个字符串,是否完全符合规则 # 表单的验证 # 并不会真的请求银行,具体手机,具体的邮件 # 总是根据一些规则来先判断是否合法
1)字符组
2)元字符
3)量词
#案例:匹配手机号码
1[3-9]\d{9}
#案例:匹配任意一个正整数
[1-9]\d*
#案例:匹配任意一个小数
\d+\.\d+ ===>\d+表示长度的数字 \.是把.转义使用的
#案例:匹配整数或小数
\d*(\.\d+)? ===>通过()进行了分组,然后通过?确定要么是整数,要么就是小数,保证10.这样的数字是匹配不上的
注意:
所有的正则表达式在工具中如果匹配成功,直接放到r'' 就可以直接使用 --> 意思是防止转义
3、re模块
1)findall、search、match方法
import re # findall匹配所有匹配项目 ret = re.findall('\d+','hello123,world456') print(ret) #['123', '456'] # search从头开始往后找,任何地方有符合条件的都返回一个,并且分组后只返回第一个 ret1 = re.search('\d+','hello123,world456') print(ret1) print(ret1.group()) #123
# match从头开始匹配,如果开始部分匹配到了匹配成功,如果开始部分没有匹配到就是匹配失败 ret1 = re.match('\d+','123hello123,456world456') print(ret1) print(ret1.group()) #123
# findall中的分组优先 ret3 = re.findall('\d+(\.\d+)?','hello123.222,world456.555') print(ret3)#['.222', '.555'] ''' 执行的结果为什么会出现这种情况,其实findall会把123.222和456.555都取出来, 但是由于分组优先的规则所以把.后面的内容取出来了, 那么如何解决? ''' ret4 = re.findall('\d+(?:\.\d+)?','hello123.222,world456.555') print(ret4) #['123.222', '456.555'] '''只需要在\.前面加上?:即可解决'''
#案例:手机号码的验证
import re phone = input('请输入手机号码:') regex = r'^1[2-9]\d{9}$' ret = re.search(regex,phone) if ret: print('手机号是合法的 %s'%phone) else: print('手机号是不合法的!') 如果用match,regex=r'1[2-9]\d{9}$' regex中就不需要^
#了解内容:根据正则进行切割
ret = re.split(r'\d+',r'alex84wusir78') print(ret)
2)sub 替换方法
# sub替换方法 语法:sub(正则表达式,要替换的内容,待替换的字符串,替换的个数) ret = re.sub(r'\d','W','alex789wusir234',1) print(ret) #alexW89wusir234
3)subn 替换方法
# subn替换方法2 返回值是一个元组,第一项是结果,第二项是替换次数 ret = re.subn(r'\d+','W','alex789wusir234',2) print(ret) #('alexWwusirW', 2)
4、os模块
#案例:计算文件夹的大小
import os def path_size(path): # 判断是不是文件夹 if os.path.isdir(path): sum_size = 0 # 获取path路径下文件的名称,最终生成的是一个列表 dir_name = os.listdir(path) # 遍历列表 for name in dir_name: # 把列表和路径拼接在一起 file_path = os.path.join(path,name) # 如果是一个文件,则计算所有文件的大小并相加求和,否则(文件夹)利用递归再次进行剥离计算此文件夹路径下的文件大小 print(file_path) if os.path.isfile(file_path): sum_size +=os.path.getsize(file_path) else: path_size(file_path) return sum_size #判断是文件,然后计算文件大小 elif os.path.isfile(path): # print('这是一个文件') return os.path.getsize(path) else: print('这不是一个文件或文件夹') path1 = r'/Users/wufq/Documents/pythonSenio/day03' path2 = r'/Users/wufq/Documents/pythonSenio/day03/eval和exec函数.py' path3 = r'/Users/wufq/Documents/pythonSenio/day03/dir1/dir_son1' ret1 = path_size(path3) print(ret1)
os
os.path
#举例:
path = r'/Users/wufq/Documents/pythonSenio/day03/eval和exec函数.py' ret = os.path.split(path) ret1 = os.path.split(r'/Users/wufq/Documents/pythonSenio/day03') print('split1------>',ret) print('split2------>',ret1) ret = os.path.dirname(path) print('dirname------>',ret) ret = os.path.basename(path) print('basename------->',ret) 执行结果: split1------> ('/Users/wufq/Documents/pythonSenio/day03', 'eval和exec函数.py') split2------> ('/Users/wufq/Documents/pythonSenio', 'day03') dirname------> /Users/wufq/Documents/pythonSenio/day03 basename-------> eval和exec函数.py
注意:os.path.split 切割路径形成元组,但是永远切割的是最后一个内容,比如路径最后一个是eval和exec函数.py,那么切割是就会切成结果1这样子,如果路径最后一个是day03,那么切割时就会切成结果2的样子,反正就会把最后一个元素切出来,分成两半,dirname取split切割后路径的第一个元素,basename取split切割后路径的第二个元素
5、time模块