python day21常用模組
⼀. 模組的簡單認識
什麼是模組. 模組就是我們把裝有特定功能的程式碼進行歸類的結果. 從程式碼編寫的單位來看我們的程式, 從小到大的順序: 一條程式碼 < 語句塊 < 程式碼塊(函式, 類) < 模組. 我們目前寫的所有的py檔案都是模組.
引入模組的⽅方式:
1. import 模組
2. from xxx import 模組
二.collection模組
collections模組主要封裝了了⼀一些關於集合類的相關操作,還提供了⼀些除了基本資料型別以外的資料集合型別. Counter, deque, OrderDict, defaultdict以及namedtuple.
1.Counter
Counter是一個計數器,主要用來計數.
# 計算一個字元中每個字元出現的次數:
#方法一
s = "ccj like pig"
dic={}
for c in s:
dic[c]=dic.setdefault(c,0)+1
print(dic)
#{'c': 2, 'j': 1, ' ': 2, 'l': 1, 'i': 2, 'k': 1, 'e': 1, 'p': 1, 'g': 1}
#方法二(Counter):
from collections import Counter
print(Counter(s))
#Counter({'c': 2, ' ': 2, 'i': 2, 'j': 1, 'l': 1, 'k': 1, 'e': 1, 'p': 1, 'g': 1})
2.deque雙向佇列.
先了解兩種資料結構:
1.棧 : FILO. 取資料時 會''先進後出''.(砌牆後取磚頭)
2.佇列 : FILO.取資料時 會''先進先出''. (類似排隊)
# 佇列: python提供了queue模組. 使用起來非常方便
import queue
q = queue.Queue()
q.put("李")
q.put("張")
q.put("孫")
print(q.get())
print(q.get())
print(q.get())
print(q.get()) #這裡無資料可取
# 注意. 如果佇列里沒有元素了. 再也拿不出來元素了,此時程式會阻塞.
deque, 注意, 此隊列是collections中的.
from collections import deque
q = deque()
q.append("張開") # 右側新增
q.append("貝爾")
q.appendleft("趙廷") # 左側新增
q.appendleft("高圓")
print(q) #deque(['高圓', '趙廷', '張開', '貝爾'])
print(q.pop()) #貝爾 #右側刪除
print(q.popleft()) #高圓 #左側刪除
3. namedtuple 命名元組
命名元組, 顧名思義. 給元組內的元素進⾏命名. 比如. 我們說(x, y) 這是⼀個元組. 同時. 我們還可以認為這是⼀個點座標. 這時, 我們就可以使用namedtuple對元素進⾏命名.
from collections import namedtuple
# 自己定義了一個元組, 這其實就是建立了一個類
nt = namedtuple("point", ["x", "y"])
p = nt(1, 2)
print(p) #point(x=1, y=2)
print(p.x)# 1
print(p.y) # 2
4.defaultdict
defaultdict: 可以給字典設定預設值. 當key不存在時. 直接獲取預設值:
from collections import defaultdict
dd = defaultdict(list) # 預設值list
print(dd['哈哈']) # [ ] 當key不存在的時候. 會自動執行構造方法中傳遞的內容.
lst =[11,22,33,44,55,66,77,88]
d=defaultdict(list) #建立一個字典,預設字典裡是列表
for el in lst:
if el <66:
d['K1'].append(el) #字典裡Key不存在,則取預設值空列表[], dic['key]會建立key.
else:
d['K2'].append(el)
print(d)
#defaultdict(<class 'list'>, {'K1': [11, 22, 33, 44, 55], 'K2': [66, 77, 88]})
三. time 時間模組
import time
print(time.time()) #打印出當前系統時間(時間戳) 結果為一串數字如:1538927647.483177
在python中時間分成三種表現形式:
1. 時間戳(timestamp). 時間戳使用的是從1970年01月01⽇00點00分00秒到現在⼀共經過了多少秒... 使⽤float來表示.
2. 格式化時間(strftime). 這個時間可以根據我們的需要對時間進⾏任意的格式化.
3. 結構化時間(struct_time). 這個時間主要可以把時間進⾏行行分類劃分. 比如. 1970年年01⽉月01⽇日 00點00分00秒 這個時間可以被細分為年, 月, 日.....⼀大堆東西.時間戳我們已經見過了就是time.time(). ⼀般, 我們不會把這樣的時間顯示給客戶,那就需要對時間進行格式化操作.
import time
shijian = time.strftime("%Y-%m-%d %H:%M:%S")
print(shijian) # 2018-11-14 19:27:12
日期格式化的標準:
%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 當前時區的名稱
%% %號本身
時間格式的轉換:
時間戳 轉 格式化時間, 需要先轉成結構化時間再轉格式化時間.
格式化時間 轉 時間戳時間,需要先轉成結構化時間再轉時間戳時間.
也就是說都得通過結構化時間來轉化.
#當前結構化時間
import time
print(time.localtime())
#結果: time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=19, tm_min=38, tm_sec=36, tm_wday=2, tm_yday=318, tm_isdst=0)
比如. 我們的資料庫中存儲了這樣⼀個時間: 1888888888. 如何顯示成xxxx年xx月xx⽇?
import time
# 時間戳:1888888888
shijianchuo=1888888888 #時間戳為1888888888
t_jiegou=time.localtime(shijianchuo) #先為轉結構化時間
print(t_jiegou) #time.struct_time(tm_year=2029, tm_mon=11, tm_mday=9, tm_hour=11, tm_min=21, tm_sec=28, tm_wday=4, tm_yday=313, tm_isdst=0)
t_geshi=time.strftime('%Y-%m%-%d %H:%M:%S',t_jiegou) #再轉格式化時間 (XXXX年-XX月-XX日 XX時:XX分:XX秒)
print(t_geshi) #打印出格式化後的時間 2029-11-09 11:21:28
格式化時間再轉回時間戳:
#格式化時間轉時間戳
s2='2029-11-09 11:21:28' # 格式化時間其實就是字串格式
t_jiegou=time.strptime(s2,'%Y-%m-%d %H:%M:%S') #把格式化時間轉成結構化時間
t_shijian=time.mktime(t_jiegou) #得到結構化時間,再轉成時間戳
print(t_shijian) # 1888888888.0 一般帶小數.0