collections、time、datetime、random模組
阿新 • • 發佈:2022-03-29
re模組補充說明
import re ret = re.findall('a(b)c', 'abcacbacb') print(ret) ret = re.findall('a(?:b)c', 'abcabcabc') print(ret) ret = re.findall('(a)(b)(c)', 'abcabcabcbabc') print(ret) """ findall預設是分組優先顯示 正則表示式中如果有括號分組 那麼在展示匹配結果的時候 預設只演示括號里正則表示式匹配的內容 也可以取消機制 (?:)就可以取消 """ ret = re.search('a(b)c', 'abcacbacbacbacb') print(ret.group()) print(ret.group(0)) print(ret.group(1)) ret = re.search('a(b)(c)', 'abcabcabcabc') print(ret.group(0)) print(ret.group(1)) print(ret.group(2)) '''針對search和match有幾個分組 group方法括號內最大就可以寫幾''' # 分組之後還可以給組起別名 ret = re.search('a(?P<name1>b)(?P<name2>c)', 'abcabcabcabc') print(ret.group('name1')) # b print(ret.group('name2')) # c
collections模組
'''提供更多的資料型別''' 1.具名元祖 from collections import namedtuple point = namedtuple('座標', ['x', 'y']) p1 = point(2, 33) p2 = point(55, 6) print(p1, p2) print(p1.x) # 2 print(p1.y) # 33 """具名元組的使用場景也非常的廣泛 比如數學領域、娛樂領域等""" card = namedtuple('撲克牌', ['花色', '點數']) c1 = card('黑桃♠', 'A') c2 = card('黑梅♣', 'K') c3 = card('紅心❤', 'A') print(c1, c2, c3) print(c1.點數)
2.雙端佇列 佇列:先進先出 預設是隻有一端只能進另外一端只能出 雙端佇列:兩端都可以進出 import queue q = queue.Queue(3) # 最大隻能放三個元素 # 存放元素 q.put(12) q.put(13) q.put(14) q.put(15) # 如果佇列滿了 繼續新增則原地等待 # 獲取元素 print(q.get()) print(q.get()) print(q.get()) print(q.get()) # 如果佇列空了 繼續獲取則原地等待 from collections import deque q = deque([1,2,3]) print(q) q.append(444) # 右邊新增元素 print(q) q.appendleft(666) # 左邊新增元素 print(q) q.pop() # 右邊彈出元素 q.popleft() # 左邊彈出元素 3.字典相關 # 正常的字典內部是無序的 d1 = dict([('name','jason'),('pwd',123),('hobby','study')]) print(d1) # {'pwd': 123, 'name': 'jason', 'hobby': 'study'} print(d1.keys()) # # 有序字典 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) print(d2.keys()) """ 有如下值集合 [1, 2, 3, 4, 5, 6, 7, 8], 將所有大於 6 的值儲存至字典的第一個key中,將小於 6 的值儲存至第二個key的值中。 """ from collections import defaultdict values = [1, 2, 3, 4, 5, 6, 7, 8] my_dict = defaultdict(list) for value in values: if value > 6: my_dict['k1'].append(value) else: my_dict['k2'].append(value)
4.計數器
'''
統計字串中所有字元出現的次數
{'a':3,'b':5...}
'''
res = 'abcacbcbcbcbaabbccbb'
from collections import Counter
r = Counter(res)
print(r) # 可以當成字典使用
time模組
# 1.常用方法
1.time.sleep(secs)
推遲指定的時間執行,單位為秒
ps:該方法貫穿前後(基礎、後期)
2.time.time()
獲取當前時間戳
# 2.三種用於表示時間的格式(彼此之間可以轉換)
1.時間戳
距離1970年1月1日0時0分0秒至此相差的秒數
time.time()
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.格式化時間
人最容易接收的一種時間格式 2000/1/21 11:11:11
time.strftime()
'%Y-%m-%d %H:%M:%S' # 2022-03-29 11:31:30
'%Y-%m-%d %X' # 2022-03-29 11:31:30
%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") 前後必須一致
ps:UTC時間比我所在的區域時間早八個小時(時區劃分)
datetime模組
# 基本操作
import datetime
print(datetime.date.today()) # 2022-03-29
print(datetime.datetime.today()) # 2022-03-29 11:55:50.883392
"""
date 意思就是年月日
datetime 意思就是年月日 時分秒
ps:後期很多時間相關的操作都是跟date和time有關係
"""
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
時間差
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=4) # 有很多時間選項
# print(ctime) # 2022-03-29 12:01:52.279025
# print(ctime + time_tel) # 2022-04-02 12:01:52.279025
# print(ctime - time_tel) # 2022-03-25 12:03:34.495813
"""
針對時間計算的公式
日期物件 = 日期物件 +/- timedelta物件
timedelta物件 = 日期物件 +/- 日期物件
"""
res = ctime + time_tel
print(res - ctime) # 4 days, 0:00:00
random模組
'''別名>>>:隨機數模組'''
import random
# print(random.random()) # 隨機產生一個0到1之間的小數
# print(random.uniform(2,4)) # 隨機產生一個2到4之間的小數
# print(random.randint(0,9)) # 隨機產生一個0到9之間的整數(包含0和9)
# print(random.randint(1,6)) # 擲骰子
# l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
# random.shuffle(l) # 隨機打亂一個數據集合 洗牌
# print(l)
# ll1 = ['特等獎','張飛抱回家','如花','百萬現金大獎','群內配對']
# print(random.choice(ll1)) # 隨機抽取一個 抽獎
ll = ['如花','C老師','R老師','J老師','M老師','張飛','龍龍']
print(random.sample(ll, 2)) # 隨機指定個數抽樣 抽樣