第十一章常用模块

mac2022-06-30  104

一、re模块 引入: import re 注:永远不要起一个py文件的名字:这个名字和你已知的模块同名。 1、查找 findall:匹配所有,每一项都是列表中的一个元素 ret = re.findall('\d+', 'abc123efg456') ret = re.findall("\d", "abc123def456") search:只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法获取结果。 如果没有匹配到,会返回None,使用group会报错 ret = re.findall('\d+', 'abc123efg456') print(ret) # 内存地址,这是一个正则匹配的结果 print(ret.group()) # 通过ret.group()获取真正的结果 # if ret : # 内存地址,这是一个正则匹配的结果 # print(ret.group()) # 通过ret.group()获取真正的结果 match:从头开始匹配,相当于search中的正则表达式加上^(从首位开始) 2、替换、切割 split:切割 set = re.split('\d+', 'abc123efg456') #正则表达式切割字符串 print(set) sub:替换 替换正则 新的 原字符串 (替换次数) s = 'abc123efg456' ret = re.sub('\d+', 'H', s, 1) print(ret) ==>abcHefg456 subn:替换后返回一个元组,第二个元素为替换的次数 s = 'abc123efg456' ret = re.subn('\d+', 'H', s) print(ret) ==>('abcHefgH', 2) 3、re模块的时间复杂度和空间复杂度的处理 compile:节省使用正则表达式解决问题的时间 先将正则表达式进行编译,成为字节码保存,后面随时调用,不用多次编译。 ret = re.compile('\d+') # 完成编译了 res = ret.findall('abc123efg456') print(res) res = ret.search('abc123efg456hig789', 8, 10) # 定义了索引范围 print(res.group()) finditer:节省使用正则表达式解决问题的空间复杂度 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 ret = re.finditer('\d+', 'abc123efg456') print(ret) # 一个迭代器 for i in ret:   print(i.group()) 二、random模块 引入: import random - 取随机 整数:彩票 抽奖 random. randint(n, m):取范围内的整数(顾头也顾尾),没有步长 random. randrang(n, m, k):取范围内整数(顾头不顾尾),k为步长  print(random.randrange(1, 10, 2)) # 1-10之间的随机奇数  - 取随机 小数 random. random(): 取0-1之间的小数 random. uniform(n,m): 取范围n-m内的小数  print(random.uniform(1, 3))  - 从一个 列表中随机抽取值:抽奖 random. choice(list):抽取一次,多次执行可能会抽取同样的值 random. sample(list, n):从列表中随机抽取n个值,这些值不会重复 l = ['a', 'b', (1, 2), 123] print(random.choice(l)) # 取值会重复 print(random.choice(l)) print(random.choice(l)) print(random.choice(l)) print(random.sample(l, 4)) # 第二个参数超过了列表长度就会报错 ==>123 123 b b [123, 'b', (1, 2), 'a'] - 打乱一个列表的顺序:洗牌 random. shuffle(list):改变原列表的顺序(可以节省空间) l = ['a', 'b', (1, 2), 123] random.shuffle(l) # 在源列表上进行操作 print(l) 四位数验证码: s = "" for i in range(4): num = random.randint(0, 9) s += str(num) print(s) 六位数验证码: def code(n=6): # 默认为六位 s = "" for i in range(n): num = random.randint(0, 9) s += str(num) return s print(code()) 数字加字符串验证码: # 循环版 s = "" for i in range(4): # print(chr(65)) # 大写字母A num = str(random.randint(0, 9)) # 生成随机字母 alpha_upp = chr(random.randint(65, 90)) alpha_low = chr(random.randint(97, 122)) res = random.choice([num, alpha_low, alpha_upp]) # 随机抽取可重复列表元素 s += res print(s) # 函数版 def code(n=6): s = "" for i in range(n): num = str(random.randint(0, 9)) alpha_upp = chr(random.randint(65, 90)) alpha_low = chr(random.randint(97, 122)) res = random.choice([num, alpha_low, alpha_upp]) s += res return s print(code(4)) print(code()) # 进阶版 能够选择是否需要字母 默认6位 def code(n=6, alpha=True): s = '' for i in range(n): num = str(random.randint(0, 9)) if alpha: alpha_upp = chr(random.randint(65, 90)) alpha_low = chr(random.randint(97, 122)) num = random.choice([num, alpha_low, alpha_upp]) s += num return s print(code(4, False)) print(code()) 三、time模块 主要用来和时间打交道 引入: import time - 常用方法 time.sleep(secs) (线程)推迟指定的时间运行,单位为秒。 表示时间的三种方式: 字符串数据类型:2018-8-20 格式化时间 —— 给人看的 结构化时间(元组):用来操作的的时间 浮点型数据类型:1534732946.449629 以s为单位 时间戳时间 —— 给计算机看的 1. 时间戳(timestamp) 时间戳表示的是从1970年1月1日00:00:00开始计算按秒计算的偏移量。 print(time.time()) # 获取当前时间戳1534765615.9471586 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2018-08-20 19:48:23 2.格式化时间 - strftime() print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2018-08-20 19:43:17 print(time.strftime('%c')) # Mon Aug 20 19:43:17 2018 (国外了解) python中时间日期格式化符号:%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 当前时区的名称 %% %号本身 3.结构化时间 - localtimetime() print(time.localtime()) # 北京时间 ==>time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=19, tm_min=51, tm_sec=5, tm_wday=0, tm_yday=232, tm_isdst=0) struct_time元组: 共有九个元素:(年,月,日,时,分,秒,一年中的第几周,一年中的第几天等) 索引(Index)属性(Attribute)值(Values)0tm_year(年)比如20111tm_mon(月)1 - 122tm_mday(日)1 - 313tm_hour(时)0 - 234tm_min(分)0 - 595tm_sec(秒)0 - 606tm_wday(weekday)0 - 6(0表示周一)7tm_yday(一年中的第几天)1 - 3668tm_isdst(是否是夏令时)默认为0 4.时间格式互换 # time时间格式互换 # 格式化时间==>时间戳 fs = time.strftime('%Y-%m-%d %H:%M:%S') st = time.strptime(fs, '%Y-%m-%d %H:%M:%S') ts = time.mktime(st) print(ts) print(time.time()) # 时间戳==>格式化时间 ts = time.time() st = time.localtime(ts) fs = time.strftime('%Y-%m-%d %H:%M:%S', st) print(fs) print(time.strftime('%Y-%m-%d %H:%M:%S')) # 计算时间差 def func(str_time1, str_time2): struct_t1 = time.strptime(str_time1, '%Y-%m-%d %H:%M:%S') # 转化为结构化时间 struct_t2 = time.strptime(str_time2, '%Y-%m-%d %H:%M:%S') timestamp1 = time.mktime(struct_t1) #转换为时间戳 timestamp2 = time.mktime(struct_t2) sub_time = timestamp2 - timestamp1 # 时间戳做减法 gm_time = time.gmtime(sub_time) # 将时间戳转换为结构化时间 return print('过去了%d年%d月%d天%d小时%d分钟%d秒' %(gm_time.tm_year-1970, gm_time.tm_mon-1, gm_time.tm_mday-1,                                 gm_time.tm_hour, gm_time.tm_min, gm_time.tm_sec)) # 减去时间戳元年得到结果 str_time1 = '2018-8-19 12:00:00' str_time2 = time.strftime('%Y-%m-%d %H:%M:%S') # 获取当格式化时间 func(str_time1, str_time2) 三、sys模块:sys模块是和Python解释器打交道的 1 argv sys.argv

转载于:https://www.cnblogs.com/jiumo/p/9503621.html

最新回复(0)