1. 程式人生 > 其它 >常用內建模組

常用內建模組

常用內建模組

re模組補充

"""
findall預設是分組優先展示
    正則表示式中如果有括號分組 那麼在展示匹配結果的時候
    預設只顯示括號內正則表示式匹配到的內容!!!
也可以取消分組優先展示的機制
    (?:)  括號前面加問號冒號
"""
# import re
# res = 'abcabcabcabcabcabcabc'
# ret = re.findall('(a)(b)c',res)  # 使用括號可以將括號的內容分組進行展示
# print(ret)
# >>>[('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b')]
# ret1 = re.findall('(?:a)(?:b)(c)',res)  # 加了?:就不會優先展示了
# print(ret1)
# >>>['c', 'c', 'c', 'c', 'c', 'c', 'c']

# ret = re.search('a(b)c', 'abcabcabcabc')
# print(ret.group())  # abc
# print(ret.group(0))  # abc
# print(ret.group(1))  # b        可以通過索引的方式單獨獲取分組內匹配到的資料
# ret = re.search('a(b)(c)', 'abcabcabcabc')
# print(ret.group())  # abc
# print(ret.group(0))  # abc
# print(ret.group(1))  # b        可以通過索引的方式單獨獲取分組內匹配到的資料
# print(ret.group(2))  # c        可以通過索引的方式單獨獲取分組內匹配到的資料
'''針對search和match有幾個分組 group方法括號內最大就可以寫幾'''

# 分組之後還可以給組起別名
# ret = re.search('a(?P<name1>b)(?P<name2>c)', 'abcabcabcabc')
# print(ret.group('name1'))  # b
# print(ret.group('name2'))  # c

collocations模組

'''提供了更多資料型別'''
# 1. 具名元組
# form collocations import namedtuple
# piont = namedtuple('學生','name age gender height weight')
# p1 = piont('petter', 18, 'male', 185, 70)
# p2 = piont('oscar', 18, 'male', 155, 70)
# print(p1.name)  # 類似於封裝資料
# print(p2.gender)
# >>>petter
# >>>male

# 2. 雙端佇列
'''
	佇列:先進先出
	雙端佇列:兩端都可以進出
'''
# from collections import deque
# p = deque([1,2,3])
# print(p)
# p.append('append')  # 末尾追加資料
# print(p)
# p.appendleft('appendleft')  # 左側追加資料
# print(p)
# p.pop()  # 彈出末尾資料
# print(p)
# p.popleft()  # 左側彈出資料
# print(p)
# >>>deque([1, 2, 3])
# >>>deque([1, 2, 3, 'append'])
# >>>deque(['appendleft', 1, 2, 3, 'append'])
# >>>deque([1, 2, 3, 'append'])
# >>>deque([1, 2, 3])

# 3. 字典相關
# 正常的字典內部是無序的,我們所看到的有序是pycharm優化的結果 
# 不正常的字典(有序字典)
# from collections import OrderedDict
# dict1 = OrderedDict([('name','petter'),('age',18),('gender','male')])
# print(dict1)  
# dict1['height'] = 185  # 新增資料
# print(dict1)
# print(dict1.keys())  # 檢視所有key
# >>>OrderedDict([('name', 'petter'), ('age', 18), ('gender', 'male')])
# >>>OrderedDict([('name', 'petter'), ('age', 18), ('gender', 'male'), ('height', 185)])
# >>>odict_keys(['name', 'age', 'gender', 'height'])
# 資料篩選分類
# from collections import defaultdict
# list1 = [1, 5, 8, 9, 3, 4, 2, 6, 7]
# dict1 = defaultdict(list)  # 新建空字典,每個value都是空列表[]
# for i in list1:
#     if i % 2 == 0:
#         dict1['單數'].append(i)
#     else:
#         dict1['雙數'].append(i)
# print(dict1)
# >>>defaultdict(<class 'list'>, {'雙數': [1, 5, 9, 3, 7], '單數': [8, 4, 2, 6]})

# 4.計數器
# 統計字串中每個字元出現的次數
# res = 'dahfkjasdfhsaklhfjksdahfkhasdhfkjlah'
# from collections import Counter
# r = Counter(res)  # 統計字元出現次數,組織成字典返回
# print(r)
# >>>Counter({'h': 7, 'a': 6, 'f': 5, 'k': 5, 'd': 4, 's': 4, 'j': 3, 'l': 2})

time模組

# 1. 常用方法
1. time.sleep()
	程式休眠,括號內寫休眠時長,單位為秒
2. time.time()
	獲取當前時間戳
  
# 2. 三種用於表示時間的格式(彼此間可以轉換)
	1. 時間戳time.time()
    	距離1970年1月1日0時0分0秒之間的秒數差
    2. 結構化時間time.localtime()
    	該時間主要是給計算機看的,人看起來不方便
        該方法可以跟一些字尾方法,可以獲取想要的時間,方法見附表
    3. 格式化時間time.strftime()
    	顯示當前時間
       	該方法可以根據不同引數顯示不同格式時間,引數可以連用,引數見附表
        eg:
            print(time.strftime('%Y-%m-%d %H:%M:%S'))
        執行結果:
            2022-03-29 17:12:38

字尾名 作用
tm_year
tm_mon
tm_mday
tm_hour
tm_min
tm_sec
tm_wday 一週的第幾天(0-6,0表示週一)
tm_yday 一年的第幾天
tm_isdst 是否是夏令時(預設為0)

結構化時間字尾

引數 作用
%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()時間戳>結構化時間
     mktime()結構化時間>時間戳
# 結構化時間<--->格式化時間
	strftime() 結構化時間>格式化時間
    strptime() 格式化時間>結構化時間
    
'''ps:UTC時間比我所在的區域時間早八個小時(時區劃分)'''

datetime模組

# 基本操作(取時間)
import datetime
# print(datetime.date.today())  # 2022-03-29
# print(datetime.datetime.today())  # 2022-03-29 17:31:15.470249
"""
date                意思就是年月日
datetime            意思就是年月日 時分秒
ps:後期很多時間相關的操作都是跟date和time有關係
"""
# 時間差
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=3)  # 設定差值
print(ctime)  
print(ctime + time_tel)
執行結果:
    2022-03-29 17:55:41.965276
	2022-04-01 18:55:41.965276
"""
針對時間計算的公式
    日期物件 = 日期物件 +/- timedelta物件
    timedelta物件 = 日期物件 +/- 日期物件
"""

random模組

隨機數模組
# 常用方法
# import random
# l1 = [1,2,3,4,5,6,7,8,9]
# print(random.random())  # 產生0-1之間的小數
# print(random.uniform(0,9))  # 產生0-9之間的小數
# print(random.randint(0,9))  # 產生0-9之間的整數
# random.shuffle(l1)  # 打亂資料集順序
# print(l1)
# print(random.choice(l1))  # 隨機抽樣
# print(random.sample(l1,3))  # 指定抽樣個數
# >>>0.7754908818200633
# >>>7.940111856951369
# >>>5
# >>>[5, 4, 6, 3, 8, 1, 7, 9, 2]
# >>>4
# >>>[6, 9, 7]