當前位置:
首頁 > 最新 > Python3 Python 常用內建模塊

Python3 Python 常用內建模塊

本系列主要學習Python的基本使用和語法知識,後續可能會圍繞著AI學習展開。

Python3 (1) Python語言的簡介

Python3 (2) Python語法基礎

Python3 (3) Python函數

Python3 (4) Python高級特性

Python3 (5) Python 函數式編程

Python3 (6) Python 模塊

Python3 (7) Python 面向對象編程

Python3 (8) Python 面向對象高級編程

Python3 (9) Python 錯誤、調試和測試

Python3 (10) Python IO編程

Python3 (11) Python 進程和線程

Python3 (12) Python 常用內建模塊

Python 中有一些內置的函數無需額外安裝和配置,即可直接使用,這就是python的內置模塊。這篇比較簡單,主要去熟悉一下有哪些常見的內置模塊,具體開發的時候心中有數。

datetime

與時間有關的,是處理日期和時間的標準庫。

獲取當前日期和時間

輸出結果:

獲取指定日期和時間

輸出結果:

datetime轉換為timestamp

時間戳這個概念,應該對應上計算機的時間規則:1970年1月1日 00:00:00 UTC+00:00時區的時刻稱為epoch time,記為0,當前時間就是相對於epoch time的秒數,稱為timestamp:

輸出結果:

Python的timestamp是一個浮點數。如果有小數位,小數位表示毫秒數,java 中的timestamp使用整數表示毫秒數,我們只需要把timestamp除以1000就得到Python的浮點表示方法。

timestamp轉換為datetime

由時間戳轉化成時間的格式 :

輸出結果:

通過轉化的時間,是針對當前操作系統的時區。轉化的是標準時間。

str轉換為datetime

str轉換為datetime:

輸出結果:

轉換後的datetime是沒有時區信息的,並且參數是時間的格式,Python中內置了好多格式,具體參考官方文檔。

datetime加減運算

在Python 中,對時間的加減運算可以直接通過、運算,但是不能直接加數字,應該轉換成對象。

輸出結果:

本地時間轉換為UTC時間

本地時間是指系統設定時區的時間,如北京時間是UTC+8:00時區的時間,而UTC時間指UTC+0:00時區的時間。類型有一個時區屬性,但是默認為,可以強行給設置一個時區,如果沒有設置是不知道是哪個時區的。

輸出結果:

時區轉換

Python中可以直接獲取到當前時間的標準時間(UTC),然後可以通過切換成其他時區的時間。

輸出結果:

時區轉換的關鍵在於,拿到一個datetime時,要獲知其正確的時區,然後強制設置時區,作為基準時間。如果不知道當前時區,就去找 UTC 標準時間,並強制設置時區為,帶時區的通過方法,可以轉換到任意時區,不是必須從時區轉換到其他時區,任何帶時區的都可以正確轉換。

最後我們要存儲時間,一般用轉成進行存儲。這裡時間的擴展類就寫完了,我們可以根據具體的情況來進行選擇使用。

collections

collections是Python內建的一個集合模塊,提供了許多有用的集合類。

namedtuple

namedtuple是一個函數,返回一個自定義的tuple對象,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。

輸出結果:

根據具體的應用場景,通過事物的屬性定義不同的對象。使表達的的事物更加的形象具體。

deque

首先雙端隊列的出現是解決單向列表結構,對插入、刪除操作效率低的問題。雙端隊列:採用雙向列表結構,更高效實現插入和刪除操作。適合用於隊列和棧。

輸出結果:

除了實現的和外,還支持和,這樣就可以非常高效地往頭部添加或刪除元素。

defaultdict

使用時,如果引用的不存在,就會拋出。如果希望不存在時,返回一個默認值,應用而生。

輸出結果:

默認值是調用函數返回的,而函數在創建defaultdict對象時傳入。除了在Key不存在時返回默認值,defaultdict的其他行為跟dict是完全一樣的。

OrderedDict

使用dict時,Key是無序的。在對dict做迭代時,我們無法確定Key的順序如果要保持Key的順序,可以用OrderedDict:

輸出結果:

使用的Key會按照插入的順序排列,不是Key本身排序。 我們可以通過實現一個FIFO(先進先出)的dict。

輸出結果:

從輸出的數據我們可以清楚的看到數據的插入刪除順序,實現了先進先出的FIFO 隊列。

Counter

Counter作為一個簡單的計數器,例如:我們來統計字元出現的次數:

輸出結果:

從輸出的結果我們可以看出,Counter 其實是一個dict 子類,通過循環來找到字元的出現次數。

這裡集合類的擴展類我們說完了。可以根據實際情況來進行使用。

base64

在開發中我們經常會通過將圖片轉成作為字元串上傳等,在Python中也存在。今天我們系統的來學習一下的組成。

輸出結果:

在 中提供了一種的編碼,其實就是把字元和分別變成和使其可以在中安全拼接。

輸出結果:

因為用在、裡面會造成歧義,所以,很多編碼後會把去掉,因為是把3個位元組變為4個位元組,所以,編碼的長度永遠是4的倍數,因此,需要加上 把字元串的長度變為4的倍數,我們可以通過上面的方法解析。

struct

在Python提供了一個struct模塊來解決bytes和其他二進位數據類型的轉換。

輸出結果:

模塊定義的數據類型可以參考Python官方文檔:https://docs.python.org/3/library/struct.html#format-characters

我們通過一個demo 來練習的使用:

輸出結果:

以上驗證了一個文件是否是點陣圖文件,如果是,列印出圖片大小和顏色數。

hashlib

的提供了常見的摘要演算法,又稱哈希演算法、散列演算法,它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進位的字元串表示),常見的有、等。

輸出結果:

我們通過 生成的128 bit位元組,通常用一個32位的16進位字元串表示,兩個我們只是去掉一個符號,就生成差別非常大的兩個不同字元串,所以我們經常通過 加密,為了確保密碼的更加安全也可以在加密前加上鹽,使一些常見的密碼更加的安全。

輸出結果:

這是演算法,生成的是一個160 bit位元組,通常用一個40位的16進位字元串表示,比SHA1更安全的演算法是SHA256和SHA512,不過越安全的演算法不僅越慢,而且摘要長度更長。

hmac

演算法:通過一個標準演算法,在計算哈希的過程中,把key混入計算過程中,適用於所有的哈希演算法,如 MD5、SHA-1等。使用如下:

輸出結果:

其實 演算法就是將混入MD5演算法中,得出一個有口令的值,達到防止黑客破解的作用。

itertools

的內建模塊提供了非常有用的用於操作迭代對象的函數。

「無限」迭代器

中提供了幾個無限迭代器,如: 、、。

輸出結果:

輸出結果:

輸出結果:

chain()

chain()可以把一組迭代對象串聯起來,形成一個更大的迭代器:

輸出結果:

groupby()

把迭代器中相鄰的重複元素挑出來放在一起:

輸出結果:

Python中的模塊還有許多有用的函數,通過這些函數創建出來的是,而不是。

contextlib

在中並不是只有函數返回的對象才能使用語句。實際上,任何對象,只要正確實現了上下文管理,就可以用於語句。contextlib模塊提供了和來快捷的實現上下文管理。

輸出結果:

讓我們通過編寫generator來簡化上下文管理。也可以使用,他其實是經過裝飾的。

輸出結果:

通過快速的解析到每一行代碼。

contextlib模塊還提供了很多好用的裝飾器。

urllib

urllib提供了一系列用於操作URL的功能。

Get

urllib的request模塊可以非常方便地抓取URL內容,也就是發送一個GET請求到指定的頁面,然後返回HTTP的響應:使得網路抓取在python中非常的簡單,下面我們抓取一個網址:

輸出結果:

可以看到HTTP響應的頭和JSON數據。如果我們要模擬瀏覽器來訪問,一般會設計到,並在其上添加頭部信息,如下:

輸出結果:

從截取的部分數據來看,我們模擬的是手機端的首頁。

Post

如果要以POST發送一個請求,只需要把參數data以bytes形式傳入。我們來模擬一下微博的登錄

輸出結果:

Handler

如果還需要更複雜的控制,比如通過一個Proxy去訪問網站,我們需要利用ProxyHandler來處理,示例代碼如下:

urllib提供的功能就是利用程序去執行各種HTTP請求。如果要模擬瀏覽器完成特定功能,需要把請求偽裝成瀏覽器。偽裝的方法是先監控瀏覽器發出的請求,再根據瀏覽器的請求頭來偽裝。

XML

在沒有流行起來是,中應用中還採用的格式, 的解析有兩種方式、 。中提供了專門的解析方法。

DOM vs SAX

操作XML有兩種方法:DOM和SAX。DOM會把整個XML讀入內存,解析為樹,因此佔用內存大,解析慢,優點是可以任意遍歷樹的節點。SAX是流模式,邊讀邊解析,佔用內存小,解析快,缺點是我們需要自己處理事件,正常情況下,優先考慮SAX,因為DOM實在太占內存。

在Python中使用SAX解析XML非常簡潔,通常我們關心的事件是start_element,end_element和char_data,準備好這3個函數,然後就可以解析xml了。如下:

輸出結果:

HTMLParser

如何解析該HTML頁面,我們用爬蟲把目標網站的頁面抓下來,然後就是解析HTML,因為HTML本質上是XML的子集,但是HTML的語法沒有XML那麼嚴格,所以不能用標準的DOM或SAX來解析HTML。所以Python提供了HTMLParser來非常方便地解析HTML,如下:

輸出結果:

解析過程中,feed()方法可以多次調用,也就是不一定一次把整個HTML字元串都塞進去,可以一部分一部分塞進去。特殊字元有兩種,一種是英文表示的 ,一種是數字表示的?,這兩種字元都可以通過Parser解析出來。

在這裡我們基本上把python中內置模塊的部分重要的方法和用法講解了,但是還有好多都沒有提到,在實踐中可以通過官方文檔,採用最優的方法解決具體問題。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python 爬蟲實戰:股票數據定向爬蟲鵬越·學霸專區
零基礎自學用Python 3開發網路爬蟲

TAG:Python |