Python 內(nèi)置了許多非常有用的模塊丧诺,無(wú)需額外安裝和配置蜕青,即可直接使用。
datetime
datetime
是Python處理日期和時(shí)間的標(biāo)準(zhǔn)庫(kù)避乏。
datetime
是模塊贯卦,datetime
模塊還包含一個(gè)datetime
類(lèi)资柔,通過(guò)from datetime import datetime
導(dǎo)入的才是datetime
這個(gè)類(lèi)。
如果僅導(dǎo)入import datetime
撵割,則必須引用全名datetime.datetime
贿堰。
獲取當(dāng)前日期和時(shí)間:
>>> from datetime import datetime
>>> now = datetime.now() # 獲取當(dāng)前datetime
>>> print(now)
2015-05-18 16:28:07.198690
>>> print(type(now))
<class 'datetime.datetime'>
指定某個(gè)日期和時(shí)間
dt = datetime(2015, 4, 19, 12, 20) # 用指定日期時(shí)間創(chuàng)建datetime
轉(zhuǎn)換時(shí)間戳
dt.timestamp() # 把datetime轉(zhuǎn)換為timestamp
結(jié)果 1429417200.0
Python的timestamp
是一個(gè)浮點(diǎn)數(shù)。如果有小數(shù)位啡彬,小數(shù)位表示毫秒數(shù)羹与。Java/JS 中的結(jié)果是毫秒數(shù)
timestamp轉(zhuǎn)換為datetime
使用datetime
提供的fromtimestamp()
方法:
>>> from datetime import datetime
>>> t = 1429417200.0
>>> print(datetime.fromtimestamp(t))
2015-04-19 12:20:00
str和datetime轉(zhuǎn)換
轉(zhuǎn)換方法是通過(guò)datetime.strptime()
實(shí)現(xiàn),需要一個(gè)日期和時(shí)間的格式化字符串
>>> from datetime import datetime
>>> cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
>>> print(cday)
2015-06-01 18:19:59
日期格式詳見(jiàn)文檔 文檔
datetime 轉(zhuǎn)換字符串通過(guò)strftime()
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.strftime('%a, %b %d %H:%M'))
Mon, May 05 16:28
datetime加減
對(duì)日期和時(shí)間進(jìn)行加減實(shí)際上就是把datetime往后或往前計(jì)算故硅,得到新的datetime
。加減可以直接用+
和-
運(yùn)算符纵搁,不過(guò)需要導(dǎo)入timedelta
這個(gè)類(lèi):
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)
collections
collections是Python內(nèi)建的一個(gè)集合模塊吃衅,提供了許多有用的集合類(lèi)。
namedtuple
namedtuple
是一個(gè)函數(shù)腾誉,它用來(lái)創(chuàng)建一個(gè)自定義的tuple
對(duì)象徘层,并且規(guī)定了tuple
元素的個(gè)數(shù),并可以用屬性而不是索引來(lái)引用tuple
的某個(gè)元素利职。
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x) # 1
print(p.y) # 2
代碼Point屬于tuple類(lèi)型趣效,用namedtuple
可以很方便地定義一種數(shù)據(jù)類(lèi)型,它具備tuple的不變性猪贪,又可以根據(jù)屬性來(lái)引用跷敬,使用十分方便。
表示一個(gè)圓
# namedtuple('名稱(chēng)', [屬性list]):
Circle = namedtuple('Circle', ['x', 'y', 'r'])
deque
deque是為了高效實(shí)現(xiàn)插入和刪除操作的雙向列表哮伟,適合用于隊(duì)列和棧:
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
print(q) # deque(['y', 'a', 'b', 'c', 'x'])
deque
除了實(shí)現(xiàn)list
的append()
和pop()
外干花,還支持appendleft()
和popleft()
, 增刪元素要比 list
快
defaultdict
用dict
時(shí)妄帘,如果引用的Key不存在楞黄,就會(huì)拋出KeyError
。如果希望key不存在時(shí)抡驼,返回一個(gè)默認(rèn)值鬼廓,就可以用defaultdict
:
>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默認(rèn)值
'N/A'
注意默認(rèn)值是調(diào)用函數(shù)返回的致盟,而函數(shù)在創(chuàng)建defaultdict對(duì)象時(shí)傳入碎税。
OrderedDict
使用dict
時(shí),Key是無(wú)序的馏锡。在對(duì)dict
做迭代時(shí)雷蹂,我們無(wú)法確定Key的順序。要保持Key的順序杯道,可以用OrderedDict
:
>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是無(wú)序的
{'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict
的Key會(huì)按照插入的順序排列匪煌,不是Key本身排序.
Counter
Counter
是一個(gè)簡(jiǎn)單的計(jì)數(shù)器,例如党巾,統(tǒng)計(jì)字符出現(xiàn)的個(gè)數(shù)萎庭,本質(zhì)也是 dict
from collections import Counter
c = Counter()
for ch in 'yulianlin':
c[ch] = c[ch] + 1
print(c) # Counter({'l': 2, 'i': 2, 'n': 2, 'y': 1, 'u': 1, 'a': 1})
HTMLParser和urllib
Python提供了HTMLParser
來(lái)非常方便地解析HTML
urllib
提供了一系列用于操作URL的功能。
建議使用BS4齿拂, 文檔地址
http://beautifulsoup.readthedocs.io/zh_CN/latest/#