python常用模組總結
常用內建模組
Python內建了許多非常有用的模組,無需額外安裝和配置,即可直接使用。
datetime
datetime
是Python處理日期和時間的標準庫。通過from datetime import datetime
匯入的才是datetime這個類。datetime預設表示本地時間,如果要轉換時區或utc時間,可以先轉換為timestamp
from datetime import datetime
#1、獲取當前時間
now = datetime.now() # 獲取當前datetime
print(now) # 2018-08-13 12:22:01.392888
print(type(now)) # <class 'datetime.datetime'>
# 2、獲取指定時間
dt = datetime(2018, 8, 13, 12, 20) # 用指定日期時間建立datetime
print(dt) # 2018-08-13 12:20:00
# 3、datetime轉換為timestamp
print(dt.timestamp()) #1429417200.0
# 4、timestamp轉換為 datetime
t = 1429417200.0
print(datetime.fromtimestamp(t)) #2015-04-19 12:20:00
# 5、字串轉換為datetime
cday = datetime.strptime('2018-8-13 18:19:59' , '%Y-%m-%d %H:%M:%S')
print(cday)
# 6、datetime轉換為字串
print(now.strftime('%a, %b %d %H:%M'))
# 7、datetime加減
now + timedelta(hours=10) #10個小時後
now - timedelta(days=1) #一天前
now + timedelta(days=2, hours=12) #兩天12小時後
collections
collections是Python內建的一個集合模組,提供了許多有用的集合類。
1、namedtuple
是一個函式,用來建立一個自定義的tuple物件,並且規定了tuple元素的個數
from collections import namedtuple
# namedtuple('名稱', [屬性list]):
Point = namedtuple('Point', ['x', 'y']) # 定義個座標
Circle = namedtuple('Circle', ['x', 'y', 'r']) # 頂一個圓
2、deque
有時代替list,list是線性儲存,資料量大的時候,插入和刪除效率很低。
from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x') #從尾部插入
q.appendleft('y')#從頭部插入
q.pop()#從尾部移除
q.popleft()#從頭部移除
3、使用dict時,如果引用的Key不存在,就會丟擲KeyError;使用defaultdict
可以返回一個預設值
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')#定義時指定預設值N/A
dd['key1'] = 'abc'
dd['key1'] # key1存在
dd['key2'] # key2不存在,返回預設值'N/A'
os模組
用於提供目錄和檔案操作,這些函式有的在os模組中,有的在os.path模組中,如下:
os.getcwd() // 獲取當前工作目錄,即當前Python指令碼工作的目錄路徑
os.chdir("dirname") // 改變當前指令碼工作目錄;相當於shell下cd
os.curdir // 返回當前目錄: ('.')
os.pardir // 獲取當前目錄的父目錄字串名:('..')
os.makedirs('dirname1/dirname2') // 可生成多層遞迴目錄
os.removedirs('dirname1') // 若目錄為空,則刪除,並遞迴到上一級目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname') // 建立目錄,相當於shell中mkdir dirname
os.rmdir('dirname') // 刪除空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
os.listdir('dirname') // 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表方式列印
os.remove() // 刪除一個檔案
os.rename("oldname","newname") // 重新命名檔案/目錄
os.stat('path/filename') // 獲取檔案/目錄資訊
os.sep // 輸出作業系統特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep // 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep // 輸出用於分割檔案路徑的字串
os.name // 輸出字串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bashcommand") // 執行shell命令,直接顯示
os.environ // 獲取系統環境變數
os.path.abspath(path) // 返回path規範化的絕對路徑
os.path.split(path) // 將path分割成目錄和檔名二元組返回
os.path.dirname(path) // 返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path) // 返回path最後的檔名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path) // 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) // 如果path是絕對路徑,返回True
os.path.isfile(path) // 如果path是一個存在的檔案,返回True。否則返回False
os.path.isdir(path) // 如果path是一個存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[,...]]) // 將多個路徑組合後返回,第一個絕對路徑之前的引數將被忽略
os.path.getatime(path) // 返回path所指向的檔案或者目錄的最後存取時間
os.path.getmtime(path) // 返回path所指向的檔案或者目錄的最後修改時間
sys模組
用於提供對直譯器相關的操作
sys.argv // 命令列引數List,第一個元素是程式本身路徑
sys.exit(n) // 退出程式,正常退出時exit(0)
sys.version // 獲取Python解釋程式的版本資訊
sys.maxint // 最大的Int值
sys.path // 返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform // 返回作業系統平臺名稱
hashlib模組
Python的hashlib提供了常見的摘要演算法,如MD5,SHA1等等。摘要函式是一個單向函式,通過digest反推data卻非常困難。注意摘要演算法不是加密演算法,只能用於防篡改,但是它的單向計算特性決定了可以在不儲存明文口令的情況下驗證使用者口令。
對原始密碼加鹽md5(message + salt),然後計算md5,只要Salt不被黑客知道,即使使用者輸入簡單口令,也很難通過MD5反推明文口令。
import hashlib
md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest())
contextlib模組
正確關閉檔案資源的一個方法是使用try…finally,但是寫try…finally非常繁瑣。Python的with語句允許我們非常方便地使用資源,而不必擔心資源沒有關閉:
with open('/path/to/file', 'r') as f:
f.read()
實際上,任何物件,只要正確實現了上下文管理,就可以用於with語句。
json 和 pickle模組
我們把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等都是一個意思。
pickle.dumps() // 返回一個str,內容就是標準的JSON。
pickle.loads() // 把JSON反序列化為Python物件
其他模組
其他如計數器Counter
、排序dic:OrderedDict
,random
模組,logging
,
shutil
模組:高階的 檔案、資料夾、壓縮包 處理模組(遞迴,檔案複製等)
configparser
模組:用於對特定的配置進行操作,
shelve
模組:一個簡單的k,v將記憶體資料通過檔案持久化的模組,可以持久化任何pickle可支援的python資料格式
常用第三方模組
pillow/chardet/psutl
影象處理標準庫Pillow,如果安裝了Anaconda,Pillow就已經可用了
pip install pillow/requests/chardet/psutil
psutil=process and system utilities,用簡單的程式碼實現系統監控
requests模組
Python已經內建的urllib模組,用於訪問網路資源,但不如第三方庫requests好用,如果安裝了Anaconda,requests就已經可用了。
1、get請求
import requests
r = requests.get('https://www.baidu.com/')
r.status_code
r.text
r.url
對於帶引數的URL,可以傳入一個dict作為params引數:
r = requests.get('https://www.baidu.com/',params={'language': 'python', 'id': '1001'})
r.url // 輸出'https://www.baidu.com/?language=python&id=1001'
如果返回是JSON資料,可以直接獲取:
r = requests.get('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json')
r.json()
需要傳入HTTP Header時,我們傳入一個dict作為headers引數:
r = requests.get('https://www.baidu.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
r.text
2、post請求
POST請求,只需要把get()方法變成post(),然後傳入data引數作為POST請求的資料:
r = requests.post('https://accounts.baidu.com/login', data={'form_email': '[email protected]', 'form_password': '123456'})
如果要傳遞JSON資料,可以直接傳入json引數:
params = {'key': 'value'}
r = requests.post(url, json=params) // 內部自動序列化為JSON
3、上傳檔案,在讀取檔案時,注意務必使用’rb’即二進位制模式讀取,這樣獲取的bytes長度才是檔案的長度。
upload_files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)
r.headers //獲取請求響應頭
r.cookies['ts'] //獲取指定cookie
//請求時傳入cookie
cs = {'token': '12345', 'status': 'working'}
r = requests.get(url, cookies=cs)
r = requests.get(url, timeout=2.5) # 2.5秒後超時