time模組,collections模組,佇列和棧

想吃橙子發表於2019-03-20

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

 

相關文章