Python基礎知識(25):常用內建模塊 1、datetime:處理日期和時間 (1)獲取當前日期和時間 (2)獲取指定日期和時間 (3)datetime轉換為timestamp timestamp轉換為datetime timestamp也可以直接被轉換到UTC標準時區的時間 (4)str轉換為 ...
Python基礎知識(25):常用內建模塊
1、datetime:處理日期和時間
(1)獲取當前日期和時間
from datetime import datetime now = datetime.now() print(now) 結果: 2018-12-07 16:05:53.396953
(2)獲取指定日期和時間
from datetime import datetime dt = datetime(2019,1,1,00,00) print(dt) 結果: 2019-01-01 00:00:00
(3)datetime轉換為timestamp
from datetime import datetime dt = datetime(2019,1,1,00,00) print(dt.timestamp()) 結果: 1546272000.0
timestamp轉換為datetime
from datetime import datetime t = 1546272000.0 #本地時間 print(datetime.fromtimestamp(t)) #UTC時間 print(datetime.utcfromtimestamp(t)) 結果: 2019-01-01 00:00:00 2018-12-31 16:00:00
timestamp也可以直接被轉換到UTC標準時區的時間
(4)str轉換為datetime
from datetime import datetime sday = datetime.strptime('2019-1-1 00:00:00','%Y-%m-%d %H:%M:%S') print(sday) 結果: 2019-01-01 00:00:00
字元串'%Y-%m-%d %H:%M:%S'
規定了日期和時間部分的格式。詳細的說明請參考Python文檔
datetime轉換為str
from datetime import datetime now = datetime.now() print(now.strftime('%a, %b %d %H:%M')) 結果: Fri, Dec 07 17:08
(5)datetime加減
from datetime import datetime, timedelta now = datetime.now() print(now) m = now + timedelta(2019,1,1,00,00) print(m) s = now - timedelta(minutes=10) print(s) 結果: 2018-12-07 17:18:39.359425 2024-06-17 17:18:40.359426 2018-12-07 17:08:39.359425
(6)本地時間轉換為UTC時間
一個datetime
類型有一個時區屬性tzinfo
,但是預設為None
,所以無法區分這個datetime
到底是哪個時區,除非強行給datetime
設置一個時區
from datetime import datetime, timedelta, timezone utc = timezone(timedelta(hours=8)) now = datetime.now() print(now) dt = now.replace(tzinfo=utc) print(dt) 結果: 2018-12-07 17:21:50.152241 2018-12-07 17:21:50.152241+08:00
可以先通過utcnow()
拿到當前的UTC時間,再轉換為任意時區的時間
from datetime import datetime, timedelta, timezone utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc) print(utc_dt) bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8))) print(bj_dt) 結果: 2018-12-07 09:28:53.515298+00:00 2018-12-07 17:28:53.515298+08:00
2、collection
提供許多有用的集合類
(1)namedtuple
namedtuple
是一個函數,它用來創建一個自定義的tuple
對象,並且規定了tuple
元素的個數,並可以用屬性而不是索引來引用tuple
的某個元素
from collections import namedtuple Person = namedtuple('Person',['x','y']) p = Person('Alice',12) print(p.x) print(p.y) 結果: Alice 12
(2)deque
deque是為了高效實現插入和刪除操作的雙向列表,適合用於隊列和棧
deque
除了實現list的append()
和pop()
外,還支持appendleft()
和popleft()
,這樣就可以非常高效地往頭部添加或刪除元素
from collections import deque q = deque(['a','b','c']) q.append('more') q.appendleft('h') print(q) 結果: deque(['h', 'a', 'b', 'c', 'more'])
(3)defaultdict
使用dict
時,如果引用的Key不存在,就會拋出KeyError
。如果希望key不存在時,返回一個預設值,就可以用defaultdict
from collections import defaultdict dd = defaultdict(lambda: 'error') dd['k1'] = 'abc' print(dd['k1']) print(dd['k2']) 結果: abc error
(4)OrderedDict
使用dict
時,Key是無序的。如果要保持Key的順序,可以用OrderedDict
(5)ChainMap
ChainMap
可以把一組dict
串起來並組成一個邏輯上的dict
。ChainMap
本身也是一個dict,但是查找的時候,會按照順序在內部的dict依次查找
(6)Counter
Counter
是一個簡單的計數器
from collections import Counter o = Counter() for ch in 'This world devours every person and moves on.': o[ch] = o[ch] + 1 print(o) 結果: Counter({' ': 7, 'o': 5, 'e': 5, 's': 4, 'r': 4, 'd': 3, 'v': 3, 'n': 3, 'T': 1, 'h': 1, 'i': 1, 'w': 1, 'l': 1, 'u': 1, 'y': 1, 'p': 1, 'a': 1, 'm': 1, '.': 1})
3、base64
Base64是一種用64個字元來表示任意二進位數據的方法,常用於在URL、Cookie、網頁中傳輸少量二進位數據
import base64 a = base64.b64encode(b'binary\x00string') print(a) b = base64.b64decode(b'YmluYXJ5AHN0cmluZw==') print(b) 結果: import base64 a = base64.b64encode(b'binary\x00string') print(a) b = base64.b64decode(b'YmluYXJ5AHN0cmluZw==') print(b)
4、struct
Python提供了一個struct
模塊來解決bytes
和其他二進位數據類型的轉換
(1)struct
的pack
函數把任意數據類型變成bytes
import struct print(struct.pack('>I',1024)) 結果: b'\x00\x00\x04\x00'
pack
的第一個參數是處理指令,'>I'
的意思是:>
表示位元組順序是big-endian,也就是網路序,I
表示4位元組無符號整數
(2)unpack
把bytes
變成相應的數據類型
import struct print(struct.unpack('>IH',b'\xf0\xf8\xf6\xf0\x00\x80')) 結果: (4042847984, 128)
根據>IH
的說明,後面的bytes
依次變為I
:4位元組無符號整數和H
:2位元組無符號整數