天天看點

Python常用标準庫、子產品

文章目錄

  • ​​一、常用标準庫​​
  • ​​二、os庫​​
  • ​​`2.1.常用子產品方法`​​
  • ​​`2.2.os.path子子產品`​​
  • ​​`2.3.周遊目錄`​​
  • ​​三、sys庫​​
  • ​​四、platform​​
  • ​​五、glob​​
  • ​​六、random​​
  • ​​七、subprocess​​
  • ​​八、pickle​​
  • ​​九、json​​
  • ​​`9.1.示例:字典與json互換`​​
  • ​​十、time​​
  • ​​十一、datetime​​
  • ​​`11.1.練習:計算時間差額,如100天零4小時前、100天零4小時後是什麼時候`​​
  • ​​十二、urllib​​
  • ​​`12.1.示例1:自定義使用者代理`​​
  • ​​`12.2.示例2:向接口送出使用者資料`​​
  • ​​十三、hashlib子產品​​
  • ​​十四、tarfile子產品​​
  • ​​十五、shutil​​
  • ​​十六、requests請問url​​
  • ​​`get`請求​​
  • ​​`post請求`​​

一、常用标準庫

Python常用标準庫、子產品

官方文檔标準庫清單:https://docs.python.org/zh-cn/3.8/library/index.html

二、os庫

os庫主要對目标和檔案操作

Python常用标準庫、子產品
Python常用标準庫、子產品

​2.1.常用子產品方法​

>>> import os
>>> os.getcwd()       # pwd
>>> os.chdir('/tmp')    # cd /tmp
>>> os.listdir('/tmp')    # ls /tmp
>>> os.makedirs('/tmp/mydemo/mydir')  # mkdir -p建立多級目錄
>>> os.mkdir('/tmp/abcde')        # mkdir
>>> os.rmdir('/tmp/abcde')        # rmdir
>>> os.chdir('/tmp/mydemo/mydir')       # cd /tmp/mydemo/mydir
>>> os.mknod('hello')         # touch hello
>>> os.symlink('/etc/hosts', 'zhuji')  # ln -s /etc/hosts zhuji
>>> os.chmod('hello', 0o644)      # chmod 644 hello
>>> os.rename('hello', 'welcome')     # mv hello welcome
>>> os.unlink('zhuji') # unlink zhuji   # 删除軟連結
>>> os.remove('welcome')        # rm -f welcome      

​2.2.os.path子子產品​

>>> os.path.abspath('.')   # 目前路徑的絕對路徑;擷取目前檔案的絕對路徑
'/tmp/mydemo/mydir'
>>> os.path.dirname('/tmp/demo/abc.txt')
'/tmp/demo'
>>> os.path.basename('/tmp/demo/abc.txt')
'abc.txt'
>>> os.path.join('/tmp/demo', 'abc.txt') # 路徑拼接
'/tmp/demo/abc.txt'
>>> os.path.split('/tmp/a.txt')     # 分割路徑為一個元組
('/tmp', 'a.txt')
>>> os.path.splitext('/tmp/a.txt')[1] # 擷取檔案字尾
'.txt'
>>> os.path.isdir('/etc') # 存在并且是目錄嗎?
True
>>> os.path.isfile('/etc/hosts') # 存在并且是檔案嗎?
True
>>> os.path.islink('/etc/passwd') # 存在并且是連結嗎?
False
>>> os.path.ismount('/') # 存在并且是挂載點嗎?
True
>>> os.path.exists('/abcd') # 存在嗎?
False      

​2.3.周遊目錄​

>>> for dirpath,dirname,filename in os.walk('/tmp'):
...     print(f"目錄路徑:{dirpath},目錄名:{dirname},檔案名:{filename}")      
Python常用标準庫、子產品

三、sys庫

sys庫用于與Python解釋器互動

Python常用标準庫、子產品
>>> import sys
>>> sys.path      #擷取Python解釋器查找子產品的路徑,類似于shell的$PATH      

四、platform

用于擷取作業系統詳細資訊

Python常用标準庫、子產品

五、glob

用于檔案查找,支援通配符(*、?、[])

>>> glob.glob('/home/user/*.sh')    #查找目錄中所有以.sh為字尾的檔案
['/home/user/b.sh', '/home/user/a.sh', '/home/user/sum.sh']
>>> glob.glob('/home/user/?.sh')    #查找目錄中出現單個字元并以.sh為字尾的檔案
['/home/user/b.sh', '/home/user/a.sh']
>>> glob.glob('/home/user/[a|b].sh')  #查找目錄中出現a.sh或b.sh的檔案
['/home/user/b.sh', '/home/user/a.sh']      

六、random

用于生成随機數

Python常用标準庫、子產品
>>> import random
>>> alist = list(range(1,10))
>>> alist
[1, 2, 3, 4, 5, 6, 7, 8, 9]

#随機取出一個數
>>> random.choice(alist)
9

#對清單洗牌
>>> random.shuffle(alist)
>>> alist
[8, 5, 4, 6, 1, 7, 9, 2, 3]

#對清單取樣
>>> random.sample(alist, 2)
[8, 6]      

七、subprocess

subprocess庫用于執行Shell指令,工作時會fork一個子程序去執行任務,連接配接到子程序的标準輸入、輸出、錯誤,并獲得它們的傳回代碼。

這個子產品将取代os.system、os.spawn*、os.popen*、popen2.和commands.。

subprocess的主要方法:

subprocess.run(),subprocess.Popen(),subprocess.call

文法:subprocess.run(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None)

Python常用标準庫、子產品
>>> import subprocess
>>> subprocess.run('ls /home', shell=True)

#傳回值
>>> rc = subprocess.run('ping -c2 -i0.2 -w1 192.168.74.133 &>/dev/null', shell=True)
>>> rc.returncode   #類似于$?

#捕獲輸出
>>> rc = subprocess.run('id root; id ddd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> rc.returncode
1
>>> rc.stdout.decode()
'uid=0(root) gid=0(root) groups=0(root)\n'      

八、pickle

pickle子產品實作了對一個Python對象結構的二進制序列化和反序列化。

主要用于将對象持久化到檔案存儲。

pickle子產品主要有兩個函數:

• dump() 把對象儲存到檔案中(序列化),使用load()函數從檔案中讀取(反序列化)

• dumps() 把對象儲存到記憶體中,使用loads()函數讀取

>>> import pickle
>>> shopping_list = ['apple', 'banana', 'orage']
>>> with open('/tmp/shop.data', 'wb') as fobj:
... pickle.dump(shopping_list, fobj)    # 序列化
# 取出資料,還是清單的形式
>>> with open('/tmp/shop.data', 'rb') as fobj:
... mylist = pickle.load(fobj)        # 反序列化
>>> mylist
['apple', 'banana', 'orage']      

九、json

JSON是一種輕量級資料交換格式,一般API傳回的資料大多是JSON、XML,如果傳回JSON的話,需将擷取的資料轉換成字典,方面在程式中處理。

json與pickle有相似的接口,主要提供兩種方法:

• dumps() 對資料進行編碼

• loads() 對資料進行解碼

​9.1.示例:字典與json互換​

import json
computer = {"主機":5000,"顯示器":1000,"滑鼠":60,"鍵盤":150}
json_obj = json.dumps(computer)
print(json_obj)

# 将JSON對象轉換為字典
data = json.loads(json_obj)
print(data)      

十、time

用于滿足簡單的時間處理,例如擷取目前時間戳、日期、時間、休眠。

Python常用标準庫、子產品
>>> import time
>>> time.time()     #1970-1-1 0:00:00 到目前時間的秒數
>>> time.ctime()    #UTC時間
'Mon Jan 27 10:10:59 2020'

#九元組struct_time
>>> time.localtime()
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=27, tm_hour=10, tm_min=11, tm_sec=20, tm_wday=0, tm_yday=27, tm_isdst=0)
>>> t = time.localtime()
>>> t.tm_year
2020

>> time.sleep(3) # 睡眠3秒
>>> time.strftime('%Y-%m-%d %H:%M:%S')
'2022-01-28 11:46:25      

十一、datetime

用于處理更複雜的日期和時間

Python常用标準庫、子產品
>>> from datetime import datetime,date
>>> t1 = datetime.now()
>>> t1
datetime.datetime(2020, 1, 27, 10, 21, 39, 621714)
>>> t1.year, t1.month, t1.day, t1.hour, t1.minute, t1.second, t1.microsecond
(2020, 1, 27, 10, 21, 39, 621714)
# 将datetime對象轉成時間字元串
>>> datetime.strftime(t1, '%Y-%m-%d %H:%M:%S')
'2019-07-08 10:55:17'
# 将時間字元串轉換成datetime對象
>>> datetime.strptime('2019-07-08 10:55:17', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2019, 7, 8, 10, 55, 17)
# 建立指定時間的datetime對象
>>> t = datetime(2019, 7, 8)
>>> t
datetime.datetime(2019, 7, 8, 0, 0)

>>> print(date.today())   #列印年月日
2021-01-10      

​11.1.練習:計算時間差額,如100天零4小時前、100天零4小時後是什麼時候​

>>> from datetime import datetime, timedelta
>>> dt = timedelta(days=100, hours=4)
>>> t = datetime.now()
>>> t
datetime.datetime(2019, 7, 8, 11, 38, 13, 922027)
>>> t - dt
datetime.datetime(2019, 3, 30, 7, 38, 13, 922027)
>>> t + dt
datetime.datetime(2019, 10, 16, 15, 38, 13, 922027)      

十二、urllib

用于通路URL

urllib包含以下類:

• urllib.request 打開和讀取 URL

• urllib.error 包含 urllib.request 抛出的異常

• urllib.parse 用于解析 URL

• urllib.robotparser 用于解析 robots.txt 檔案

用的最多是urllib.request 類,它定義了适用于在各種複雜情況下打開 URL,例如基本認證、重定向、Cookie、代理等。

from urllib import request
res = request.urlopen("http://www.ctnrs.com")      

res是一個HTTPResponse類型的對象,包含以下方法和屬性

Python常用标準庫、子產品

​12.1.示例1:自定義使用者代理​

from urllib import request
url = "http://www.ctnrs.com"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108Safari/537.36"
header = {"User-Agent": user_agent}
req = request.Request(url, headers=header)
res = request.urlopen(req)
print(res.getcode())      

​12.2.示例2:向接口送出使用者資料​

from urllib import request, parse
url = "http://www.ctnrs.com/login"
post_data = {"username":"user1","password":"123456"}
post_data = parse.urlencode(post_data).encode("utf8") #将字典轉為URL查詢字元串格式,并轉為bytes類型
req = request.Request(url, data=post_data, headers=header)
res = request.urlopen(req)
print(res.read())      

十三、hashlib子產品

用于計算檔案的哈希值

# 計算檔案的md5值
>>> with open('/etc/passwd', 'rb') as fobj:
... data = fobj.read()
>>> m = hashlib.md5(data)
>>> m.hexdigest()
'decb544ed171583bb1d7722500910d9e'      

十四、tarfile子產品

# 壓縮
>>> import tarfile
>>> tar = tarfile.open('/tmp/mytest.tar.gz', 'w:gz') # 用gzip壓縮
>>> tar.add('/etc/hosts') # 壓縮單個檔案
>>> tar.add('/etc/security') # 壓縮目錄
>>> tar.close() # 關閉
# 解壓
>>> tar = tarfile.open('/tmp/mytest.tar.gz') # 自動識别壓縮格式,以讀方式打開
>>> tar.extractall(path='/var/tmp') # 指定解壓目錄,預設解到目前目錄
>>> tar.close()      

十五、shutil

>>> import shutil
>>> shutil.copy2('/bin/ls', '/tmp/list7')   #相當于cp -p
>>> shutil.copytree('/etc/security', '/tmp/security')   #相當于cp -r
>>> shutil.move('/tmp/security', '/var/tmp/anquan')   #相當于mv
>>> shutil.rmtree('/var/tmp/anquan')    #相當于rm -rf      

十六、requests請問url

​get​

​請求

import requests
from requests.auth import HTTPBasicAuth
url = "http://192.168.1.2:8088/artifactory/release/"
username = "admin"
password = "123456"
res = requests.get(url,auth=HTTPBasicAuth(username,password )
data = req.text                     # 傳回網頁内容,類型為字元串      

​post請求​