re模組補充與其他模組介紹
阿新 • • 發佈:2022-03-29
目錄
注:昨日寫了re單個模組幾個重要的點需要補充
注:昨日寫了re單個模組幾個重要的點需要補充
一.re模組補充
1.findall獨有的優先級別展示 res = re.findall('abc', 'abcabcabcabc') print(res) # ['abc','abc','abc','abc'] # 正則表示式 2.res = re.findall('a(b)c', 'abcabcabcabc') print(res) # ['b', 'b', 'b', 'b'] # 正則表示式優先分組() 3.res = re.findall('a(f:b)c', 'abcabcabcabc') print(res) # ['abc','abc','abc','abc'] # 正則表示式取消優先展示(f:) 4res = re.findall('(a)(b)(c)', 'abcabcabcabc') print(res) # [('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c')] # 正則表示式三個值都優先後會出現列表套元組 """不能通過findall.來進行group取值"""
1.可以通過group取值
1.res = re.search('(a)(b)(c)', 'abcabcabcabc') 2.res = re.match('(a)(b)(c)', 'abcabcabcabc') match search print(res.group(0)) #abc print(res.group(1)) #a print(res.group(2)) #b print(res.group(3)) #c """有幾個值可以取幾個值""" 還可以通過改名字來進行引用取值 1.res = re.search('(a)(?P<name>b)(c)', 'abcabcabcabc') print(res.group('name')) #b
二.(collections)模組
在原來dict list tuple set 增加更多的資料型別
1.具名元組(有名字的元組):namedtuple
2.雙端對列(多進多出):queue
3.有序字典(原來的字典是無序的):OrderedDict
4.計數器(繼承了字典):Counter
1.具名元組
通過:from collections import namedtuple # 指名道姓
ser = namedtuple('名字',['x','y'])
point = ser(1, 2) 結果:#名字 (x=1, y=2)
print(point.x) 結果:#1
2.雙端佇列
import queue # 佇列
q = queue.Queue(3) # 輸入的值對應就是進去的值和輸出的值
q.put(123)
q.put(321) # put 存放
q.put(555)
print(q.get()) # 獲取
print(q.get())
print(q.get())
# 結果 123,321, 555 (先進先出)
------------------------
from collections import deque
q = deque([1,2,3,4])
print(q)
# 結果 ([1,2,3,4])
q.append(444) # 尾部新增
q.appendleft(555) # 頭部新增
print(q)
# 結果 ([555,1,2,3,4,444])
q.pop() # 尾部彈出
q.popleft() # 頭部彈出
print(q)
# 結果 ([1,2,3,4])
3.有序字典
1.字典是無序的 K:V
2.有序字典
from collections import OrderedDict
ser = OrderedDict([(1,2), (3,4), (5,6)])
ser['x'] = 222 # 新增新的鍵值對
ser['c'] = 111 # 新增新的鍵值對
# 結果([(1,2), (3,4), (5,6),(x,222),(c,111)])
OrderedDict會記住字典的排列順序
不會改變順序 如果新增的話也是按照順序來新增的
2.預設字典
from collections import defaultdict
defaultdict 預設所有的值為列表(list)
3.1小例題
有如下值集合 [11,22,33,44,55,67,77,88,99,999],
將所有大於 66 的值儲存至字典的第一個key中,將小於 66 的值儲存至第二個key的值中
1.正常
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)
2.呼叫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.計數器
1.正常呼叫
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}
2.呼叫模組Counter
from collections import Counter
r = Counter(res)
print(r)
# 結果{'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
還可以單個取值
print(r.get('a')) # 當字典使用
三.時間模組time
1.時間模組常用方法
time.sleep(sece)推遲執行時間,單位是秒
time.time() 時間戳
2.表示時間各種的三種用法(可以彼此轉換)
1.時間戳
time.time
距離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.格式化時間
人最容易接受的時間格式
time.strftime()
'%Y-%m-%d %H:%M:%S'
'%Y-%m-%d %X'
2022/3/29/ 20:21:50
3.1更多的格式化時間
%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.2時間型別轉換
格式化時間<==> 結構化時間<==>時間戳
四.模組datetime
import datetime
print(datetime.date.today()) # 2022-03-29
# 今日時間
print(datetime.datetime.today()) # 2022-03-29 20:46:33.665519
1.date:年月日
2.datetime: 年月日 時分秒
4.1時間差
import datetime
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=1) # days 天數
print(ctime) # 本地時間
print(ctime + time_tel) # 一天以後
print(ctime - time_tel) # 一天以前
結果分別為:
2022-03-29 20:49:29.333389
2022-03-30 20:49:29.333389
2022-03-28 20:49:29.333389
"""
針對時間計算的公式
日期物件 = 日期物件 +/- timedelta物件
timedelta物件 = 日期物件 +/- 日期物件
"""
五.隨機模組random
import random
1.random.random()) # 隨機產生一個0到1之間的小數
2.random.uniform(2,4)) # 隨機產生一個2到4之間的小數
3.random.randint(0,9)) # 隨機產生一個0到9之間的整數(包含0和9)
4.random.shuffle # 隨機打亂一個數據集合
5.random.choice # 隨機在(資料集合)中抽取一個
6.random.sample(%s,2) # 隨機指定個數抽取