模块的后续

今日内容概要

  • re模块的补充
  • 正则起别名和分组机制
  • collections模块的使用
  • time与datetime模块
  • random随机模块的使用

今日内容

re模块的补充
import re   #先调用re模块
res = re.findall('sbs','sbsbsbsbsbsbsbsbssbsbbsbsbsbsbsbs')# 将里面的文件'sbs'全取
print(res)  # 将res输出
re.findall('s(b)s','sbsbsbsbsbsbsbsbssbsbbsbsbsbsbsbs')  # 括号是将里面的'b'单独取出
re.findall('s(?:b)s','sbsbsbsbsbsbsbsbssbsbbsbsbsbsbsbs')   # 这个是?:取消特殊提取 
re.findall('(s)(b)     (s)','sbsbsbsbsbsbsbsbssbsbbsbsbsbsbsbs')
# 输出以后将会把字符串按('s','b','s')元组排列,

findall是分组优先展示 也就是全取的一种正则表达式里面如果有括号也就是上文(b)那种会在输出的时候特殊表示也可以通过?:来取消特殊表示

其他表示法:

import re 
res=re.search('s(b)s','sbsbsbsbsbsbsbsbssbsbbsbsbsbsbsbs') # search 是搜索取值只能取一次值
print(res.group()) # 由于是一次只输出一次
print(res.group(1)) # 特殊取值是(b)所以得出的结果是b
res = re.search('a(b)(c)', 'abcabcabcabc')
# 注意 笔者在这里把b 和 c 都特殊处理所以在取值为下方时:
print(ret.group(1))
print(ret.group(2))
得出结果为b和c
在使用match和搜索search时 group()内的值是他取值最大的范围
分组的起别名
res = re.search('s(?P<name1>b)s','sbsbsbsbsbsbsbsbssbsbbsbsbsbsbsbs')
下次调用的时候直接group('name1')就行了
print(res.group('name1'))

collections模块的使用

1. 具名元组
from collections import namedtuple
用于元组的数据
point = namedtuple(...,['',''])
多元组的创作
from collections import namedtuple
#
point = namedtuple('锁定目标', ['x', 'y', 'z'])
lacer1 = point(21, 32, 55)
ancer = point(11, 33, 55)
saber = point(12, 35, 66)
print(lacer1, ancer, saber)
print(ancer.y) # 还可以指定的选取相关的元组目标
锁定目标(x=21, y=32, z=55) 锁定目标(x=11, y=33, z=55) 锁定目标(x=12, y=35, z=66)
33
双端队列

​ 队列:先进先出 双端队列:两端都可以进出

# 首先调取一个模块
import queue
AC = queue.Queue(4)  # 括号内的4是能取得的最大元素次数 
AC.put(10086)       # 用put添加元素
AC.put(10010)
AC.put(10011)
AC.put(10018)
print(AC.get())      # 用get 输出 由于只存放了四个元素所以只能去四次 在多就取不了
print(AC.get())
print(AC.get())
print(AC.get())
deque方法
from collections import deque # 调用模块
AE = deque(['oscar','angle','james'])  # 定义AE的列表
AE.append('yufan')    
print(AE)
AE.appendleft('hardon')  # 表示从左开始加入
print(AE)
cs = AE.pop()   # 弹出则用pop 
print(cs)
print(AE)
cd = AE.popleft()  # 和上文相对应 popleft则是从左边弹出
print(AE)
print(cd)

字典相关

res = name_list = {('name','jack'),('pwd',10086),('money','100')}
print(res)
name = {'jack':'q','anne':'sos'}
print(name['jack'])
# 可以用key 直接取值
因为字典是无序的所以要通过一些渠道进行取值
from collections import OrderedDict
any = OrderedDict({('n',21),('c',22),('a',31)})
any['w'] = 23  # 在有序字典的情况下可以通过直接加键对的方式在字典后面
any['q'] = 28 
print(any)
print(any.keys()) # 有序的取键以列表的形式表达出来
当然 也可以用来处理数据 比如a>b的大小配对
首先得调用 defaultdict 模块
from collections import defaultdict
values = [11,22,334,44,5,5,23431,41,3412,3,1,4,5,1,3212,24,1,3,12,35,1,24,12,321,1,4,21,412,312,312,312,31231]
dict2 = defaultdict[list]
for s in values:
    if s > 100:
        dict2['ax'].append(values)
    else:
        dict2['ads'].append(values)
print(dict2)
计数器
用于统计字符串中出现元素的次数
需要调用一个Counter的模块不需要for 循环统计表达
res = 'abcabcacbacbacbacb'  
from collections import Counter
r = Counter(res)   # 将结果赋值给r 输出即可
print(r)

time模块

  1. 常用的延迟启动

​ 1.time.sleep(secs)
​ 推迟指定的时间运行,单位为秒
​ 2.time.time()
​ 获取当前时间戳

  1. 三种用于表示时间的格式
    1. 时间戳 距离1970年1月1日0时0分0秒至此相差的秒数
    2. 结构化时间(全程英文类似昨天爬的网站)
    	time.localtime()
          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. 格式化时间
 	1. 我们计算机右下角显示的时间就是这个
#在调用模块后 接收.strftime()来输出
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(time.strftime('%Y-%m-%d %X'))
'%Y-%m-%d %H:%M:%S' 这是时间的排列顺序 依次排列
年 月 日 时 分 秒 
	%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 当前时区的名称
          %% %号本身

时间类型的转换

格式化时间<==>结构化时间<==>时间戳
# 结构化时间<==>时间戳
gmtime    localtime
格式化时间<==>结构化时间
import time

print(time.strptime("2017-03-16", "%Y-%m-%d"))
# 用于转换到结构化时间
print(time.strptime("2017/03", "%Y/%m"))
print(time.strptime("2017-03-16", "%Y-%m-%d"))
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(time.strftime('%Y-%m-%d %X'))  # 用与结构化时间转换格式化时间
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=60, tm_isdst=-1)
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
2022-03-29 21:17:47
2022-03-29 21:17:47

datetime模块

date                意思就是年月日
datetime            意思就是年月日 时分秒
import datetime     # 调用datatime 模块
print(datetime.date.today()) # 获取当前时间到日
print(datetime.datetime.today())# 4获取当前到秒
res = datetime.date.today()
print(res.year)
print(res.month)
print(res.day)

'''时间差
	日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象
'''
Atime = datetime.datetime.today()
timenext = datetime.timedelta(days=5)
nexttime = print(Atime + timenext)

random模块

import random
# 玩过我的世界吗 这就是幸运方块
print(random.random()) # 默认是0-1也就是0-1之间的一个小数
print(random.uniform(1, 5))# 随机产生一个1-5之间的小说
print(random.randint(0, 9)# 0-9之间的一个整数
      
shuffle 和 sample 
import random
A = [11,22,33,44,55,66]
random.shuffle(A)   # shuffle 是随机打乱列表里面的排序
      # [44, 22, 33, 11, 66, 55]
print(A)
res = random.sample(A,2) # sample 是随机取值 后面跟的是取值的个数
print(res)
posted on 2022-03-29 21:46  等秋叶的七月  阅读(95)  评论(0)    收藏  举报