經常使用模塊【二】經常使用模塊

py_模塊二

 

time模塊

和時間有關係的咱們就要用到時間模塊。在使用模塊以前,應該首先導入這個模塊。html

#經常使用方法
1.time.sleep(secs)
(線程)推遲指定的時間運行。單位爲秒。
2.time.time()
獲取當前時間戳

表示時間的三種方式python

在Python中,一般有這三種方式來表示時間:時間戳、元組(struct_time)、格式化的時間字符串:app

(1)時間戳(timestamp) :一般來講,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。咱們運行「type(time.time())」,返回的是float類型。post

(2)格式化的時間字符串(Format String): ‘1999-12-06’url

%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 當前時區的名稱
%% %號自己

(3)元組(struct_time) :struct_time元組共有9個元素共九個元素:(年,月,日,時,分,秒,一年中第幾周,一年中第幾天等)spa

索引(Index) 屬性(Attribute) 值(Values)
0 tm_year(年) 好比2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(時) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 60
6 tm_wday(weekday) 0 - 6(0表示週一)
7 tm_yday(一年中的第幾天) 1 - 366
8 tm_isdst(是不是夏令時) 默認爲0

 首先,咱們先導入time模塊,來認識一下python中表示時間的幾種格式:線程

複製代碼
#導入時間模塊
>>>import time

#時間戳
>>>time.time()
1500875844.800804

#時間字符串
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 13:54:37'
>>>time.strftime("%Y-%m-%d %H-%M-%S")
'2017-07-24 13-55-04'

#時間元組:localtime將一個時間戳轉換爲當前時區的struct_time
time.localtime()
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
          tm_hour=13, tm_min=59, tm_sec=37, 
                 tm_wday=0, tm_yday=205, tm_isdst=0)
複製代碼

小結:時間戳是計算機可以識別的時間;時間字符串是人可以看懂的時間;元組則是用來操做時間的code

幾種格式之間的轉換orm

複製代碼
#時間戳-->結構化時間
#time.gmtime(時間戳)    #UTC時間,與英國倫敦當地時間一致
#time.localtime(時間戳) #當地時間。例如咱們如今在北京執行這個方法:與UTC時間相差8小時,UTC時間+8小時 = 北京時間 
>>>time.gmtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
>>>time.localtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)

#結構化時間-->時間戳 
#time.mktime(結構化時間)
>>>time_tuple = time.localtime(1500000000)
>>>time.mktime(time_tuple)
1500000000.0
複製代碼
複製代碼
#結構化時間-->字符串時間
#time.strftime("格式定義","結構化時間")  結構化時間參數若不傳,則顯示當前時間
>>>time.strftime("%Y-%m-%d %X")
'2017-07-24 14:55:36'
>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
'2017-07-14'

#字符串時間-->結構化時間
#time.strptime(時間字符串,字符串對應格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
>>>time.strptime("07/24/2017","%m/%d/%Y")
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
複製代碼

複製代碼
#結構化時間 --> %a %b %d %H:%M:%S %Y串
#time.asctime(結構化時間) 若是不傳參數,直接返回當前時間的格式化串
>>>time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
>>>time.asctime()
'Mon Jul 24 15:18:33 2017'

#時間戳 --> %a %b %d %H:%M:%S %Y串
#time.ctime(時間戳)  若是不傳參數,直接返回當前時間的格式化串
>>>time.ctime()
'Mon Jul 24 15:19:07 2017'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017' 
複製代碼
  計算時間差

 collections模塊

方法一:from collections import Counterhtm

Counter類的目的是用來跟蹤值出現的次數。它是一個無序的容器類型,以字典的鍵值對形式存儲,其中元素做爲key,其計數做爲value。計數值能夠是任意的Interger(包括0和負數)。Counter類和其餘語言的bags或multisets很類似。

c = Counter('abcdeabcdabcaba')
print c
輸出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

方法二:from collections import namedtuple

命名元組

們知道tuple能夠表示不變集合,例如,一個點的二維座標就能夠表示成:

>>> p = (1, 2)

可是,看到(1, 2),很難看出這個tuple是用來表示一個座標的。

這時,namedtuple就派上了用場:

複製代碼
a = nametuple('alex',['x','y'])
p = alex(1,2)
p.x
p.y

1
2
複製代碼

似的,若是要用座標和半徑表示一個圓,也能夠用namedtuple定義:

#namedtuple('名稱', [屬性list]):
Circle = namedtuple('Circle', ['x', 'y', 'r'])

方法三:from collections import defaultdict

默認字典

la = [('紅色',1),('黃色',1),('綠色',1),('藍色',1),('紅色',5),('綠色',1),('綠色',1),('綠色',1)]  計算各顏色的數量,格式----{'紅色': 6, '黃色': 1, '綠色': 4, '藍色': 1}

  View Code

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':'開車'},
]

打印出以下格式:{'alex': ['抽菸', '喝酒', '燙頭', '撩妹'], 'wusir': ['小寶劍', '游泳', '打牌'], '太白': ['燙頭', '洗腳', '開車']}

j = defaultdict(list)  # {'dict':[]}
for i in li:
    if j.get(i['name']):
        j[i['name']].append(i['hobby'])
    else:
        j[i['name']] = [i['hobby']]
print(dict(j))

 

方法四:from collections import deque

使用list存儲數據時,按索引訪問元素很快,可是插入和刪除元素就很慢了,由於list是線性存儲,數據量大的時候,插入和刪除效率很低。

deque是爲了高效實現插入和刪除操做的雙向列表,適合用於隊列和棧:

>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x'])

deque除了實現list的append()pop()外,還支持appendleft()popleft(),這樣就能夠很是高效地往頭部添加或刪除元素。

datetime,timedelta

複製代碼
from datetime import datetime,timedelta

print(datetime.now())                              # 時間對象

f = datetime.timestamp(datetime.now())   # 將時間對象轉換成時間戳
print(f)
print(datetime.fromtimestamp(f))              # 將時間戳轉換成時間對象

print(datetime.strptime('2018-11-30','%Y-%m-%d'))   # 將字符串轉成時間對象

f = datetime.now()
print(datetime.strftime(f,'%Y-%m-%d'))   # 將時間對象轉成字符串

print(datetime.now() - timedelta(weeks=1))  # 重點記***************
# 參數: seconds(秒)  microseconds(微秒)  milliseconds(毫秒)  minutes(分鐘)  hours(小時)  weeks(周)
複製代碼
相關文章
相關標籤/搜索