其他分享
首页 > 其他分享> > 各种模块的应用

各种模块的应用

作者:互联网

re模块的其它知识

impore re
ret = re.findall('a(b)c','abcabcabcabc')
print(ret)
得到的结果是['b','b','b','b']
# 结论就是:如果在正则表达式中有括号分组的,那么在展示匹配结果的时候,默认只显示括号内正则表达式1匹配到的内容
ret = re.findall('a(?:b)c','abcabcabcabc')
print(ret)
得到的结果是['abc','abc','abc','abc']
# 我们如果想取消正则表达式的分组有限展示的话,就可以在括号前面加问号跟冒号————(?:)
ret = re.findall('(a)(b)(c)','abcabcabcabc')
得到的结果是[('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')]
# 结果它会将分组里的字符都以元祖的形式展现出来
ret = re.findall('(?P<name>a)(b)(c)', 'abcabcabcabc')
print(ret)   
得到的结果是[('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')]
print(ret.group('name'))
# ?P是给组取别名,下次想用的时候就可以通过这个名字来使用
ret = re.search('a(b)c', 'abcabcabcabc')
print(ret.group())
结果是abc
# 因为search找到一个就结束
print(ret.group(0))
结果是abc
print(ret.group(1))
结果是b
# 分组优先展示的就只有findall方法,search跟match方法里面不会有分组优先展示
# 可以通过索引的方式单独获取分组内匹配到的数据,针对search和match有几个分组 group方法括号内最大就可以写几,超出了的话就会报错

collections模块

# 1.具名元祖
from collections import namedtuple
1.1.先产生一个元祖对象模板
point = namedtuple('坐标',['x','y'])
1.2.创建诸多元祖数据
p1 = point(1,2)
p2 = point(3,4)
1.3.将元祖数据带入到对象模板中
print(p1)   # 坐标(x=1, y=2)
1.4.也可以单独取元祖数据中的'x'或者'y'
print(p1.x)   # 1
# 1.5.元祖使用场景非常的广泛,可以是任意元祖数据

# 2.双端队列
队列:先进先出,默认是只有一端只能进另外一端只能出
双端队列:两端都能进出
import queue
q = queue.Queue(2)   # 2表示的是元素最大放置量是2个
存放元素
q.put(123)
q.put(321)
# 如果队列满了,继续添加则原地等待
获取元素
print(q.get())     # 123
print(q.get())		# 321
# 如果队列空了的话,继续获取则原地等待
from collections import deque
q = deque([1,2])
print(q)
右边添加元素
q.append(3)
左边添加元素
q.appendleft(0)
右边弹出元素
q.pop()
左边弹出元素
q.popleft()

# 3.字典相关
正常的字典内部是无序
from collections import OrderedDict
 d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
 print(d2)
 d2['x'] = 111
 d2['y'] = 222
 d2['z'] = 333
 print(d2)
# OrderedDict([('a', 1), ('b', 2), ('c', 3), ('x', 111), ('y', 222), ('z', 333)])
 print(d2.keys())
# odict_keys(['a', 'b', 'c', 'x', 'y', 'z'])

有如下值集合 [11,22,33,44,55,67,77,88,99,999],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
l1 = [11,22,33,44,55,67,77,88,99,999]
new_dict = {'k1':[],'k2':[]}
for i in l1:
    if i > 66:
        new_dict['k1'].append(i)
    else:
        new_dict['k2'].append(i)
print(new_dict)
# 只能打印出K值
from collections import defaultdict
values = [11, 22, 33,44,55,67,77,88,99,90]
my_dict = defaultdict(list)  # 字典所有的值默认都是列表  {'':[],'':[]}
for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

 # 4.计数器
res = 'abcdeabcdabcaba'
统计字符串中所有字符出现的次数
4.1.先创建一个字典
new_dict = {}
4.2.for循环
for i in res:
4.3.判断字符是否在字符串中
	if i in not in new_dict:
4.4.字符第一次出现,应创建一个新的键值对
		new_dict[i] = 1
    else:
        new_dict[i] += 1
 print(new_dict)
 # {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
from collections import Counter
r = Counter(res)
print(r) 
# Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
print(r.get('a')) 
 # 可以当成字典使用


 

time模块

# 常用方法
1.time.sleep(s):推迟指定的时间运行,括号里是时间
2.time.time():获取当前时间戳,时间戳就是1970年1月1日0时0分0秒起到现在的秒数
# 三种表示时间的格式
1.时间戳(time.time())
2.结构化时间(主要是给计算机看的)
	time.localtime()
		 0 tm_year(年)	
          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.格式化时间(最方便人看懂)
 	 time.strftime()
     '%Y-%m-%d %H:%M:%S'
        '%Y-%m-%d %X'
		 %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

结构化时间<==>格式化时间
strftime
strptime
time.strptime('2017-03-16','%Y-%m-%d')
time.strptime("2017/03","%Y/%m")

datetime模块

1.基本操作
import datetime
print(datetime.date.today())   # date(年月日)
print(datetime.datetime.today())    # datetime(年月日,时分秒)
res = datetime.date.today()
print(res.year)  # 2022(年)
print(res.month)  # 3(月份)
print(res.day)  # 29 (日)
print(res.weekday())  # 1       星期0-6
print(res.isoweekday())  # 2    星期1-7

2.时间差
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(day=%s)
print(ctime)
print(ctime + time_tel)
print(ctime - time_tel)
针对时间计算的公式
    日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象
eg:
    res = (ctime + time_tel)
    print(res - ctime)

random模块(随机数模块)

import random
print(random.random())  #随机生成一个0与1之间的小数
print(random.uniform(1,2))  # 随机生成一个1与2之间的小数
print(random.randint(1,6))   # 随机生成一个1与6之间的整数,包含1和6
random.shuffle()  # 随机打乱一个数据集合
random.choice()  # 括号里没有参数的话,默认是列表中随机抽取一个
random.sample(%d)  # %d代表随机抽取的个数

标签:各种,模块,res,ret,datetime,dict,应用,time,print
来源: https://www.cnblogs.com/WH101/p/16073513.html