time
time模組 內建的 import直接匯入,不需要自己安裝的就是內建模組
import time
時間模組分三種
時間戳 給計算機看的
print(time.time()) 浮點型(小數) 給計算機看 可用於簡單計算
結構化時間 用來修改
print(time.localtime()) 結構化時間 輸出結果為命名元組
字串時間 給人看的
print(time.strftime(%Y-%m-%d %X)
年 月 日 當前時間
時間戳想轉換成字串時間
先轉換成結構化時間
f = time.localtime(time.time()-86400) 減去86400秒,獲得一天前的時間
再將結構化時間轉換成字串時間
print(time.strftime('%Y-%m-%d %H:%M:%S',f))
t = '2019-03-20 10:40:00' 這個時間向後退一個月 # 1.轉成結構化 f = time.strptime(t,'%Y-%m-%d %X') # 2.結構化時間轉成時間戳 ts = time.mktime(f) # 3.將時間戳向大變 new_ts = ts + 86400 * 30 # 4.將最新的時間戳轉成結構化時間 new_f = time.localtime(new_ts) # 5.將結構化時間轉成字串時間 print(time.strftime('%Y-%m-%d %X',new_f)) 獲取當前時間求前一月的現在時間 1.獲取時間戳進行減法計算 new_ts = time.time() - 30*86400 # 2.最新的時間戳轉成結構化時間 new_f = time.localtime(new_ts) # 3.將結構化時間轉成字串時間 print(time.strftime('%Y-%m-%d %X',new_f)) time.strftime()
strftime 結構化時間轉換成字串時間使用 ('格式',' 結構化時間') 格式可以少寫
strptime 字串時間專程結構化時間使用 ('字串時間','格式') 格式必須一一對應
datetime
from datetime import datetime from:從xx匯入
print(datetime.now()) 結果精確到毫秒 拿到的是時間物件
與時間戳之間的轉換
f = datetime.timestamp(datetime.now()) # 將時間物件轉換成時間戳 print(datetime.fromtimestamp(f)) # 將時間戳轉成時間物件
與字串時間之間的轉換
print(datetime.strptime('2018-11-30','%Y-%m-%d')) # 將字串轉成時間物件 f = datetime.now() print(datetime.strftime(f,'%Y-%m-%d')) 將時間物件轉成字串
精華: from datetime import datetime,timedelta print(datetime.now() - timedelta())
collections 資料型別的補充
from collections import xxx <---- 匯入什麼模組就進行什麼操作
Counter 計算
c = Counter('adfasdfasdfasdfasdfasdf') print(c) print(dict(c)) # from collections import namedtuple 命名元組 tu = namedtuple('juge',['name','age','sex','hobby']) 類 t = tu('腚哥',19,'待定','抽菸,喝酒,燙頭') 例項一個物件 明確的標明每個元素是什麼意思 print(t[0]) 物件找屬性
deque 雙端佇列
雙端佇列 d = deque([1,2,3,4]) d.append(5) #右邊新增 print(d) d.appendleft(10) # 左邊新增 print(d) d.insert(2,99) print(d) d.remove(3) print(d) print(d.pop()) print(d) print(d.popleft()) print(d)
佇列 棧
佇列 FIFO 先進先出
應用場景 火車票購票服務等
import queue q = queue.Queue(3) 括號內不寫內容預設無限制,可加int,作用為限制put的個數 print(q.qsize()) 看佇列還有多少值 print(q.empty()) 看佇列是否是空的 print(q.full()) 看佇列是否是滿的 q.put(1) 向佇列加入內容 q.put('ancdf') q.put([1,2,3]) print('已經放了3個') q.put([1,2,3]) print('已經放了4個') print(q) print(q.get()) 誰先put就取出誰 按put的順序取出 print(q.get()) print(q.get()) print(q.get()) 如果佇列裡的資料已經全部取出,但還要get取出,程式不會報錯,但已經取不出值,get在等佇列裡的值取出,程式不會繼續向下執行,始終在執行本行的get,這種情況叫做 阻塞
棧 後進先出 LIFO 先進後出 FILO
import queue lifoq = queue.LifoQueue() lifoq.put(1) lifoq.put(2) lifoq.put(3) lifoq.put(4) lifoq.put(5) print(lifoq.get()) ----> 5 print(lifoq.get()) ----> 4 後進入的先被取出來
def func2(): print('345') def func1(): func2() print('234') def main(): func1() print('123') main() 棧 在底層的資料結構 再很多演算法中 解決問題的時候必須用到這種資料結構
defaultdict 預設字典
li = [ {'name':'alex','hobby':'抽菸'}, {'name':'alex','hobby':'喝酒'}, {'name':'alex','hobby':'燙頭'}, {'name':'alex','hobby':'撩妹'}, {'name':'wusir','hobby':'小寶劍'}, {'name':'wusir','hobby':'游泳'}, {'name':'wusir','hobby':'打牌'}, {'name':'太白','hobby':'燙頭'}, {'name':'太白','hobby':'洗腳'}, {'name':'太白','hobby':'開車'}, ] for i in li: d[i['name']].append(i['hobby']) print([dict(d)]) li = [('紅色',1),('黃色',1),('綠色',1),('藍色',1),('紅色',5),('綠色',1),('綠色',1),('綠色',1)] d = defaultdict(list) for i in li: d[i[0]].append(i[1]) dd = dict(d) for em in dd: dd[em] = sum(dd[em]) print(dd) dic = {"1":2,'2':2,'3':5,'alex':1,'wusir':2,'eva_j':3,'renjia':4} while 1: time.sleep(0.5) print(dic) print dic