常用內建模組
- 3. 時間的度量
• 格林威治標準時間
– 經常簡稱 GMT 時間
– 常不嚴謹(且有爭議性)地當成是 UTC 時間
• 世界時
– 藉由觀測遠方星體跨過子午線而得
– 在 1972 年導入 UTC 之前,GMT 與 UT 是相
同的
- 4. • 國際原子時
– 將秒的國際單位(International System of
Units, SI)定義為銫(caesium)原子輻射振
動 9192631770 周耗費的時間
– 時間從 UT 的 1958 年開始同步
• 世界協調時間
– 折衷修正版本的世界協調時間,常簡稱為 UTC
– 1972 年 UTC採用了閏秒(leap second)修正
- 5. • Unix 時間
– UTC 時間 1970 年(Unix 元年)1 月1 日
00:00:00 為起點而經過的秒數
– 不考慮閏秒修正,用以表達時間軸上某一瞬間
• epoch
– 某個特定時間的起點,時間軸上某一瞬間
– Unix epoch 選為UTC 時間 1970 年 1 月 1 日
00:00:00
- 9. • ISO8601 標準
– 嚴格來說並非年曆系統,而是時間日期表示方
法的標準,用以統一時間日期的資料交換格式
– 19 世紀是指 1900 至 1999 年(包含該年),
而格里高利曆的 19 世紀是指 1801 年至 1900
年(包含該年)
- 22. 使用 datetime 模組
• 人類在時間的表達上有時只需要日期、有
時只需要時間,有時會同時表達日期與時
間
• 通常不會特別聲明時區
• 可能只會提及年、月、年月、月日、時分
秒等
- 24. • 有個 datetime 或 date 實例,想將它們包含
的時間概念轉換為 UTC 時間戳記
• 有個時間戳記,也可以透過 datetime 或
date 的 fromtimestamp() 來建立
datetime 或 date 實例
- 29. • 想將 utc 轉換為台灣的時區
• 內建的 timezone 只單純考量了UTC 偏移,
不考量日光節約時間等其他因素
- 30. • 若需要 timezone 以外的其他時區定義,
可以額外安裝社群貢獻的 pytz 模組
• 可以使用 pip install pytz 來安裝
- 32. • 在台灣時區, 1975 年 3 月 31 日 23 時 40
分 0 秒加一個小時的時間會是多少呢?
• 使用了 normalize() 之後,才能得到考
量了日光節約時間的正確時間
- 33. • 一個常見的建議是,使用 UTC 來進行時間
的儲存或操作
• 因為UTC 是絕對時間,不考量日光節約時
間等問題
• 在必須使用當地時區的場合時,再使用
datetime 實例的 astimezone() 做轉換
- 35. • 呼叫 getLogger() 時可以不指定名稱,
這時會取得根 Logger
• 父階層相同的 Logger,父 Logger 的組
態相同
• 想要套件中的模組在進行日誌時,都使用
相同的父組態,可以在套件的 __init__.py
檔案中撰寫:
- 37. • Logger 有階層關係
• 每個 Logger 處理完自己的日誌動作後,
會再委託父 Logger 處理
• 在不調整父 Logger 組態的情況下,直接
設定 Logger 實例,就只能設定為更嚴格
的日誌層級,才會有實際的效用
- 40. • 根 Logger 的日誌訊息預設會輸出至
sys.stderr
• 想要修改能輸出至檔案,可以使用
logging.basicConfig() 指定
filename 參數
• 子 Logger 實例可以透過 addHandler()
新增自己的處理器
- 42. • 定義過濾器可以繼承 logging.Filter 類
別並定義 filter(record) 方法
• 或者是定義一個物件具有
filter(record) 方法
• 自 Python 3.2 之後,也可以使用函式作為
過濾器了
• Logger 或 Handler 實例都有
addFilter() 方法,可以新增過濾器
- 46. • 自 Python 3.2 開始,建議改用
logging.config.dictConfig()
- 52. • 因為 在Python 字串中被作為轉義字元,
因此要撰寫規則表示式時,必須撰寫為
'd'
• 在撰寫規則表示式時,建議使用原始字串
- 55. • 詮譯字元在規則表示式中有特殊意義,例
如! $ ^ * ( ) + = { } [ ] |
: . ?等
• 若要比對這些字元,則必須加上忽略符號
• 如果不確定哪些標點符號字元要加上忽略
符號,可以在每個標點符號前加上 ,例
如比對逗號也可以寫 ,
- 62. • 有個文字Justin dog Monica doggie Irene,
你想要直接依當中單字 dog 切出前後兩個
子字串?
• 可以使用 b 標出單字邊界
- 64. • 可以使用 () 來將規則表示式分組,除了作
為子規則表示式之外,還可搭配量詞使用
• 例如想要驗證電子郵件格式,域名稱可以
有數層,必須是大小寫英文字元或數字
– ^[a-zA-Z]+d*@([a-zA-Z0-9]+.)+com
- 66. • 分組回頭參考時,是在 後加上分組計數,
表示參考第幾個分組的比對結果
• dd 要求比對兩個數字,(dd)1 的話,
表示要輸入四個數字,輸入的前兩個數字
與後兩個數字必須相同
• ["'][^"']*["'] 比對單引號或雙引號中
0 或多個字元,但沒有比對兩個都要是單引
號或雙引號
• (["'])[^"']*1 則比對出前後引號必須
一致
- 67. Pattern 與 Match 物件
• 剖析、驗證規則表示式往往是最耗時間的
階段
• 在頻繁使用某規則表示式的場合,若可以
將剖析、驗證過後的規則表示式重複使用,
對效率將會有所幫助
- 71. • search() 方法與 match() 方法必須小心
區分,search() 會在整個字串中,
• 找尋第一個符合的子字串,而 match() 只
會在字串開頭看看接下來的字串是否符合