re模組 collections模組 time與datetime模組 random模組
阿新 • • 發佈:2022-03-29
內容概要
-
re模組補充說明
-
正則起別名及分組機制
-
collection模組
-
time與datetime模組
-
random隨機數模組
內容詳細
re模組補充說明
# 案例: import re 1.# findall 方法補充:加括號優先展示 # 1.res = re.findall('a(b)c','abcabcabcabc') # print(res) # ['b', 'b', 'b', 'b'] # 在正則表示式中給某個元素新增一個括號 分組優先展示 # 2.res = re.findall('a(?:b)c','abcabcabcabc') # print(res) # ['abc', 'abc', 'abc', 'abc'] # 如何取消分組優先展示 ——可以使用?: # 3.res =re.findall('(a)(b)(c)','abcabcabcabc') # print(res) # [('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')] # 在findall預設是分組優先展示 # 大白話:正則表示式中如果有括號分組 那麼在展示匹配結果的時候:預設會優先展示括號內正則表示式匹配的內容 如例題1. # 也可以取消分組優先展示的機制 通過(?:) 就是在括號前面加問號冒號 2.# search 方法補充:可以通過索引單獨分配資料 大白話:分組特定取值 # res =re.search('(a)(b)c','abcabcabcabc') # print(res.group()) # abc # print(res.group(0)) # abc # print(res.group(1)) # a # print(res.group(2)) # b # 如果是在search中可以加括號分組然後通過索引的方式單獨獲取匹配到的資料 也是遵循search的方法 只取到一個就結束 # 需要注意的是:針對search和match有幾個分組 group方法括號內最大就可以寫數值幾 # 分組之後還可以給組起別名 通過?p<>的形式 然後可以通過別名直接找我們所需要的資料 #例題:res =re.search('a(?P<name1>b)(?P<name2>c)','abcabcabcabc') # print(res.group('name1')) # b # print(res.group('name2')) # c
collections模組
"在內建資料型別(dict list set tuple)的基礎上 collections模組還提供了幾個額外的資料型別:counter、deque、defaultdict、namedtuple" 1.# 具名元組 namedtuple from collections import namedtuple # 用法1.先產生一個元組物件模板 # res = namedtuple('座標',['x','y']) # # 2.建立諸多元資料 # p1 =res(1,2) # p2 =res(3,4) # print(p1,p2) # 座標(x=1, y=2) 座標(x=3, y=4) 形成了一個二維座標 # # 還可以用來取值 # print(p1.x) # 1 # print(p2.y) # 4 # 用法2 可以產生多維空間的用法 person =namedtuple('人物','name age gender') p1 =person('jason',18,'male') p2 =person('jerry',18,'female') print(p1,p2) #人物(name='jason', age=18, gender='male') 人物(name='jerry', age=18, gender='female') # 也可以用來取值 print(p1.name,p1.gender) # jason male "具名元組的使用場景也非常廣泛 比如數學領域、娛樂領域等" 比如: card = namedtuple('撲克牌', ['花色', '點數']) c1 = card('黑桃♠', 'A') c2 = card('黑梅♣', 'K') c3 = card('紅心❤', 'A') print(c1, c2, c3) print(c1.點數) 2.# 雙端佇列 佇列:先進先出 預設是隻有一端只能進另外一端只能出 雙端佇列:兩端都可以進出 # 1.import queue # 佇列 # q =queue.Queue(3) # 表示的是對列只能放三個元素 # # 存放元素 # q.put(123) # q.put(231) # q.put(321) # # q.put(444) # 如果對列滿了 繼續新增元素則原地等待 # # 獲取元素 # print(q.get()) # print(q.get()) # print(q.get()) # print(q.get()) # 如果佇列空了 繼續獲取則需要原地等待 # 2.deque 雙端佇列 from collections import deque q =deque([1,2,3]) # print(q) # deque([1, 2, 3]) q.append(444) # 雙端佇列可以右邊新增元素 print(q) # deque([1, 2, 3, 444]) q.appendleft(666) # 也可以左邊新增元素 print(q) # deque([666, 1, 2, 3, 444]) q.pop() # 可以尾部右側彈出元素 print(q) # deque([666, 1, 2, 3]) q.popleft() # 也可以左邊彈出元素 print(q) # deque([1, 2, 3]) 3.字典相關 # 我們都知道正常的字典內部都是無序的 # 無序的字典 d1 =dict([('name','jason'),('pwd',123),('hobby','study')]) print(d1) # {'name': 'jason', 'pwd': 123, 'hobby': 'study'} print(d1.keys()) # dict_keys(['name', 'pwd', 'hobby']) # 有序的字典 OrderedDict from collections import OrderedDict d2 =OrderedDict([('a',1),('b',2),('c',3)]) print(d2) # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 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) 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' new_dict ={} for i in res: if i not in new_dict: # 字元第一次出現 應該建立一個新的鍵值對 new_dict[i] = 1 else: new_dict[i] += 1 print(new_dict) # {'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1} # 用counter如何來書寫 from collections import Counter r =Counter(res) print(r) #Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) print(r.get('a')) # 5 # 此外 我們還可以將統計次數的功能當成字典使用
time 模組
# 1.採用方法 1.time.sleep(secs) 推遲指定的時間執行,單位為秒 注意:該方法貫穿前後(基礎、後期) 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.格式化時間 人最容易接收的一種時間格式 # 結構化時間 import time print(time.localtime()) # # 2022-03-29 17:17:40 time.struct_time(tm_year=2022, tm_mon=3, tm_mday=29, tm_hour=17, tm_min=11, tm_sec=33, tm_wday=1, tm_yday=88, tm_isdst=0) # 格式化時間 print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2022-03-29 17:17:40 print(time.strftime('%Y-%m-%d %X')) # 2022-03-29 17:17:40
三種時間型別的轉換
格式化時間 <==> 結構化時間 <==> 時間戳
# 時間戳<==> 結構化時間
gmtime
localtime
# 結構化時間<-->格式化時間
strftime
strptime
time.strptime("2017-03-16","%Y-%m-%d")
time.strptime("2017/03","%Y/%m") 括號內前後數字與英文必須保持一致 包括格式 年月等
datetime模組(更加高效)
# 基本操作
import datetime
# print(datetime.date.today()) # 2022-03-29
# print(datetime.datetime.today()) # 2022-03-29 18:06:30.300979 注意一個是有時分秒
date 表示是年月日
datetime 表示是年月日 時分秒
注意:後期很多時間相關的操作都是跟date和time有關係
例題:
# res =datetime.date.today()
# print(res.year) # 2022
# print(res.month) # 3
# print(res.day) # 29
# print(res.weekday) # 1 weekday是星期一到星期天是從數字0到數字6
# print(res.isoweekday()) # 2 isoweekday是星期一到星期天是從數字1到數字7
"時間差應用"
ctime =datetime.datetime.today()
time_tel =datetime.timedelta(days=4) # 時間差為4天
print(ctime) # 2022-03-29 18:18:29.296103
print(ctime+time_tel) # 2022-04-02 18:20:08.519779 # 加可以定時定在4天后
print(ctime-time_tel) # 減可以定時定在4天前 2022-03-25 18:21:51.654678
針對時間計算的公式
日期物件 =日期物件 +/- timedalta物件
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)) # 隨機指定個數抽樣 抽樣