Python中的模組
當我們的程式碼量達到一定程度時,如果全寫在一個檔案中將不利於閱讀和維護,也會顯得程式比較臃腫。這個時候我們會想,如果不把所用的功能都寫在一個檔案,而是像寫函式一樣把他們根據功能類別分為若干個檔案儲存,這樣在用到某一個功能時再呼叫儲存它的檔案能夠讓整個程式邏輯更清晰,同時也方便閱讀和維護。
Python中的程式碼由簡單到複雜的模式大概為這樣:
單個命令->程式碼塊->函式->類->模組
不難發現,隨著程式碼複雜程度的增加,我們需要用更靈活的方式儲存程式碼,儘量減少不必要的程式碼重複。
模組的定義與引用都十分簡單,首先我新建了兩個檔案,一個是寫了具體功能的模組,另一個則是負責呼叫該模組。
引用模組的關鍵詞是import,而模組名稱則為檔名,當我使用import關鍵詞引用support模組時,Python會在當前檔案目錄下尋找support。py這個檔案,然後將它引入到testMoudle。py檔案中去,如果覺得不太好懂,可以理解為Python將support。py中的程式碼複製了一份到testMoudle。py中,但是兩個檔案本身其實沒有改變。
呼叫模組中的函式和類相似,是以
模組名.函式名()
這種方式。
From...import 關鍵字
有的時候我們不希望把整個模組都引入進來,而是想只引入某些函式,那麼這個時候就可以使用from。。。import這種格式引入
常用內建模組
剛才說了當我們使用import關鍵字引用模組時,Python會自動在當前目錄下尋找對應的檔案,那麼如果當前目錄下沒有這個檔案怎麼辦?
Python本身其實已經幫我們寫好了很多模組,當import引用的模組無法在當前目錄下找到時,Python會在其安裝目錄下的lib資料夾中繼續找。
這個資料夾下的模組屬於Python安裝後自帶的,稱為
內建模組。
比較常用的內建模組:
Base64
base64.b64encode(s, altchars=None)
對 bytes-like object s 進行 Base64 編碼,並返回編碼後的 bytes。
可選項 altchars 必須是一個長 2 位元組的 bytes-like object,它指定了用於替換 + 和 / 的字元。這允許應用程式生成 URL 或檔案系統安全的 Base64 字串。預設值是 None,使用標準 Base64 字母表。
base64.b64decode(s, altchars=None, validate=False)
解碼 Base64 編碼過的 bytes-like object 或 ASCII 字串 s 並返回解碼過的 bytes。
可選項 altchars 必須是一個長 2 位元組的 bytes-like object,它指定了用於替換 + 和 / 的字元。
如果 s 被不正確地填寫,一個 binascii。Error 錯誤將被丟擲。
如果 validate 值為 False (預設情況),則在填充檢查前,將丟棄既不在標準 base-64 字母表之中也不在備用字母表中的字元。如果 validate 為 True,這些非 base64 字元將導致 binascii。Error。
base64.urlsafe_b64encode(s)
編碼 bytes-like object s,使用 URL 與檔案系統安全的字母表,使用 - 以及 _ 代替標準 Base64 字母表中的 + 和 /。返回編碼過的 bytes。結果中可能包含 =。
base64.urlsafe_b64decode(s)
解碼上述加密。
Math
math模組主要用於處理一些專業的數學運算
Time
Time模組用於處理時間和日期
常用外部模組
除了Python內建模組之外,Python還有非常多的第三方模組,在pypi網站可以看到所有可使用的第三方公開模組
然後使用pip下載安裝想要的模組(這裡我因為本地同時安裝了python2。7和python3。7所以pip做了重新命名區分)
Tkinter圖形化介面
Pillow
pillow是一個圖形處理模組,可以實現常用的裁剪,模糊,輸出文字等功能。
from PIL import Image
im = Image。open(‘image。jpeg’)
w,h = im。size
print(‘Original image size:%s %s’ % (w,h))
im。thumbnail((w//2, h//2))
print(‘Resize image to: %s %s’ % (w//2,h//2))
im。save(‘thumbnial。jpg’,‘jpeg’)
模糊效果
from PIL import Image,ImageFilter
import os
im = Image。open(‘image。jpeg’)
im2 = im。filter(ImageFilter。BLUR)
im2。save(‘blur。jpg’,‘jpeg’)
if os。path。exists(‘blur。jpg’):
print(‘success!’)
requests
requests用來處理URL資源。
get()
使用requests。get(‘url’)來實現一個get訪問功能。
>>> import requests
>>> r = requests。get(‘https://api。github。com/user’, auth=(‘user’, ‘pass’))
>>> r。status_code
200
>>> r。headers[‘content-type’]
‘application/json; charset=utf8’
>>> r。encoding
‘utf-8’
>>> r。text
u‘{“type”:“User”。。。’
>>> r。json()
{u‘disk_usage’: 368627, u‘private_gists’: 484, 。。。}
requests。status_code獲取狀態碼
requests。headers[‘’]獲取頭資訊
。。。
如果url帶引數,則可以設定get的第二個引數params,傳入型別為dict。
requests。content`可以獲取網頁的bytes物件。
requests。json`可以直接 獲取JSON格式資料,返回值為dict。
post()
post請求:
>>> r = requests。post(‘https://accounts。douban。com/login’, data={‘form_email’: ‘abc@example。com’, ‘form_password’: ‘123456’})
檔案上傳:
>>> upload_files = {‘file’: open(‘report。xls’, ‘rb’)}
>>> r = requests。post(url, files=upload_files)
此外,還有put(),delete()方法,使用方法類似。
如果想要訪問時帶上cookie,只需要準備一個dict傳入cookie引數即可。
>>> cs = {‘token’: ‘12345’, ‘status’: ‘working’}
>>> r = requests。get(url, cookies=cs)