1. 程式人生 > 其它 >python時間模組與隨機值模組

python時間模組與隨機值模組

python時間模組與隨機值模組

昨日學習回顧

正則表示式

正則表示式是一門獨立的知識,內容非常多,在多種程式語言中都實用。

取消轉義

\斜杆可以取消特殊含義,在python中用r可以。

貪婪匹配:.*							 獲取最大可獲取值
非貪婪匹配:.*?					  獲取零個或一個

正則表示式在python中,需要呼叫re模組

今日學習內容

re模組補充說明

在re模組中,re.findall
如果對需要的元素使用小括號括起來,那麼他的同組元素就會優先匹配到一起,形成一個列表套元組的形式,未被小括號括起來的內容將不會顯示,如果需要取消優先表示,(?:)需要這樣使用小括號。

ret = re.findall('a(b)c', 'abcabcabcabc')
print(ret)  # ['b', 'b', 'b', 'b']

ret = re.findall('a(?:b)c', 'abcabcabcabc')
print(ret)  # ['abc', 'abc', 'abc', 'abc']

在re模組中,re.search可以利用索引取值的方法單獨獲取分組內匹配到的資料,並且分組後可以給分組起別名。

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(?P<name1>b)(?P<name2>c)', 'abcabcabcabc')
print(ret.group('name1'))  # b
print(ret.group('name2'))  # c

collections模組

collections翻譯

1.具名元組

from collections import namedtuple

1.建立一個元組物件模板。
	point = tuple('數字組',['數字1','數字2'])
2.建立諸多元租資料
	p1 = point(1,2)
  p2 = point(3,4)
  print(p1,p2)  # 數字組(數字1=1,數字2=2) 數字組(數字1=3,數字2=4)   

2.雙端佇列

佇列:先進先出   預設是隻有一端只能進另外一端只能出
  雙端佇列:兩端都可以進出
 	import queue
  q = queue.Queue(3)  # 最大隻能放三個元素
  存放元素
  q.put(123)
  q.put(321)
  q.put(222)
  q.put(444)  # 如果佇列滿了 繼續新增則原地等待
  獲取元素
  print(q.get())  # 123
  print(q.get())  # 321
  print(q.get())  # 222
  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.字典相關

正常字典內部是無序的

通過collections中的OrderedDict模組

有序字典
from collections import OrderedDict
d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2)
d2['x'] = 1
d2['y'] = 2
d2['z'] = 3
print(d2)
print(d2.keys())

OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict([('a', 1), ('b', 2), ('c', 3), ('x', 1), ('y', 2), ('z', 3)])
odict_keys(['a', 'b', 'c', 'x', 'y', 'z'])

字典生成式
from collections import defaultdict
values = [1, 2, 3, 4, 5 , 7, 8, 9]
my_dict = defaultdict(list)  # 字典所有的值預設都是列表  {'':[],'':[]}
for value in  values:
    if value<6:  # 設定條件
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

print(my_dict)

defaultdict(<class 'list'>, {'k1': [1, 2, 3, 4, 5], 'k2': [7, 8, 9]})

4.計數器

res = 'abcabcabcaabbcc'
from collections import Counter
r = Counter(res)
print(r)  # 返回一個字典,每種值與值的數量形成一個鍵對值
print(r.get('b'))  # 取出v值,獲取值出現的數量

time模組

1.time.sleep(secs)
	推遲指定的時間執行,單位為秒
  	ps:該方法貫穿前後(基礎、後期)
2.time.time()
	獲取當前時間戳

該時間型別主要是給計算機看的,人看起來不太方便

結構化時間
tm_year
tm_mon
tm_hour
tm_min
tm_sec
tm_wday(weekday) 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 localtime

結構化時間<-->格式化時間

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 21:27:45.801529 獲取精確到秒的時間

時間差
import datetime
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(minutes='分鐘')  # (days='天數') 設定一個時間
print(ctime)
print(ctime + time_tel)  # 加上前面設定好的時間
print(ctime - time_tel)	 # 減去前面設定好的時間
針對時間計算的公式
    日期物件 = 日期物件 +/- timedelta物件
    timedelta物件 = 日期物件 +/- 日期物件
		res = ctime + time_tel
		print(res - ctime)  # 獲取兩個時間間隔的時間值

random模組

random翻譯

非常有趣的模組,隨機數

import random

random.random()				              隨機產生一個0到1之間的小數
random.uniform(最小值,最大值)  				隨機產生一個範圍內之間的小數
random.randint(最小值,最大值)					隨機產生一個範圍內之間的整數
random.shuffle(資料集合)             隨機打亂資料集合
random.choice(資料集合)							 隨機從資料集合中選取一個
random.sample(資料集合, 抽取次數)     隨機從資料集合中抽取默認個

作業

len_number = int(input('請輸入您需要的驗證碼位數>>>:'))
number1 = []
str1 = []
mac = []
mac2 = ''
len1 = random.randint(0, len_number)		# 數字長度隨機從0到使用者輸入抽取一個
while len(number1) < len1:  # 迴圈,直到數字列表中的元素等於隨機出的數字
    number1.append(str(random.randint(0, 9)))  # 隨機新增0-9中間的數字
len2 = len_number - len1  # 字母長度等於使用者輸入減去隨機數
while len(str1) < len2:  # 迴圈,直到字母列表中的元素等於使用者輸入長度減去隨機數
    number2 = random.randint(65,122)  # 隨機ASCII表對應數字
    if not 90 < number2 < 97:  # 在非字母對應中邊不新增
        str1.append(chr(number2))  # 新增大小字母到字母列表中
for i in number1:  
    mac.append(i)
for i1 in str1:
    mac.append(i1)
mac1 = random.sample(mac, len_number)  # 隨機從數字與字母結合的列表中抽取使用者輸入的次數的驗證碼位數,徹底數字字母打亂順序
for i2 in mac1:
    mac2 = mac2 + i2  # 轉換為字串,並拼接
print(mac2)

今日小結

隨機模組真有意思!