python之os、sys、json、subprocess模組
阿新 • • 發佈:2022-03-30
python之os、sys、json、subprocess模組
昨日內容回顧
re模組方法補充
findall系列方法分組優先機制
括號會優先顯示括號內內容,手動取消優先顯示需要(?:)
正則表示式起別名(只要用於search與match中)
(?P<別名>本名)
collections模組
1.具名元組 from collections import namedtuple 建立一個元組物件模板。 point = tuple('數字組',['數字1','數字2']) 建立諸多元租資料 p1 = point(1,2) p2 = point(3,4) print(p1,p2) 2.雙端佇列 佇列:先進先出 預設是隻有一端只能進另外一端只能出 雙端佇列:兩端都可以進出 import queue q = queue.Queue(最大可儲存元素) q.get() # 獲取元素,知道佇列無元素 q.pop() # 右邊彈出元素 q.popleft() # 左邊彈出元素 3.有序字典 from collections import OrderedDict d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(d2) d2['x'] = 1 d2['y'] = 2 d2['z'] = 3 print(d2) print(d2.keys()) 字典生成式 from collections import defaultdict values = [1, 2, 3, 4, 5 , 7, 8, 9] my_dict = defaultdict(list) # 字典所有的值預設都是列表 {'':[],'':[]} for value in values: if value<6: # 設定條件 my_dict['k1'].append(value) else: my_dict['k2'].append(value) 4.計數器 res = 'abcabcabcaabbcc' from collections import Counter r = Counter(res) print(r) # 返回一個字典,每種值與值的數量形成一個鍵對值 print(r.get('b')) # 取出v值,獲取值出現的數量
time模組
三種表示時間的格式
1.時間戳
2.結構化時間
3.格式化時間
time.time() # 獲取當前時間戳
time.localtime() # 結構化當前時間
time.strftime() # 格式化當前時間,格式由引數 format 決定
%Y%m%d %H%M%S %X
time.sleep() # 暫停程式執行
時間格式轉換
時間戳 結構化時間 格式化時間
time.strptime('時間','時間格式')
不可從時間戳直接轉換為格式化時間
datetime模組
常用獲取時間 datetime.datetime.today() '''年月日時分秒''' datetime.date.today() '''年月日''' 時間差值 datetime.timedelta() 日期物件 = 日期物件 +/- timedelta物件 timedelta物件 = 日期物件 +/- 日期物件
random模組
# 隨機數模組
random.random() 0到1之間的小數
random.uniform() 指定區間的小數
random.randint() 指定區間的整數(擲骰子)
random.choice() 隨機抽取一個(抽獎)
random.sample() 隨機抽樣(可以自定義個數)
random.shuffle() 隨機打亂資料集合
今日內容概要
os模組
1.建立目錄或資料夾 os.mkdir(r'資料夾') # 在當前執行檔案所在的路徑下建立一個資料夾 os.makedirs(r'目錄') # makedirs可以建立單級目錄 os.makedirs(r'1/2/3') # makedirs支援建立多級目錄 2.刪除目錄(資料夾) os.rmdir(r'aaa') # 可以刪除單級目錄 os.rmdir(r'bbb') # 只能刪空的單級目錄 os.removedirs(r'ccc') # 可以刪除單級目錄 os.removedirs(r'目標絕對地址') # 刪除目錄之後如果外層的目錄也是空的則繼續刪除 3.檢視某個路徑下所有的檔名稱(檔案、資料夾) print(os.listdir()) # 獲取當前根目錄下所有檔案 print(os.listdir(r'/Users')) # 獲取目標目錄下的所有檔案 4.刪除、重新命名檔案 os.remove(phtn) # path -- 要移除的檔案路徑 os.rename(src, dst) # src -- 要修改的目錄名 dst -- 修改後的目錄名 5.獲取當前路徑、切換路徑 os.getcwd() # 返回當前程序的工作目錄 os.chdir(path) # 改變當前程序的工作目錄 path -- 要切換到的新路徑 6.軟體開發目錄規範,啟動指令碼相容性操作 os.path.dirname(__file__) # 動態獲取當前執行檔案所在的絕對路徑 os.path.dirname(os.path.dirname(__file__)) # 每巢狀一層就是往上切換一層 print(os.path.abspath(__file__)) # 動態獲取當前執行檔案自身的路徑 7.判斷檔案是否存在 os.path.isabs(path) # 判斷是否為絕對路徑 os.path.isfile(path) # 判斷路徑是否為檔案 os.path.isdir(path) # 判斷路徑是否為目錄 os.path.islink(path) # 判斷路徑是否為連結 8.拼接路徑 res = os.path.join(base_dir, exe_dir) # 能夠自動識別當前作業系統的分隔符 9.獲取檔案大小(位元組 bytes) print(os.path.getsize(path))
sys模組
該模組主要是跟python直譯器打交道
import sys
print(sys.path) # 列舉當前執行檔案所在的sys.path
print(sys.version) # 獲取直譯器版本資訊
print(sys.platform) # 獲取平臺資訊
print(sys.argv) # 自定義命令列操作,只能在終端裡使用,本身是個列表。
try:
username = sys.argv[1]
password = sys.argv[2]
except Exception:
print('請輸入使用者名稱和密碼')
else:
if username == 'jason' and password == '123':
print('可以正常執行該檔案')
else:
print('使用者名稱或密碼錯誤 沒有該檔案的執行許可權')
json模組
JavaScript Object Notation,JavaScript 物件表示法
json是一個序列化模組,是一種儲存和交換文字資訊的語法,
主要用於跨語言傳輸資料,類似中轉站。
資料基於網路傳輸肯定是二進位制格式,而python中只有字串資料型別可以轉換為二進位制資料。
利用編碼encode,所以,json格式資料,本質應該屬於字串型別。
雙引號是json格式資料獨有的標誌符號,在控制檯中會呈現雙引號的都是json。
具體操作
例入,現在我要將一段python資料轉換為json格式傳送出去,然後再經由json模組將這段json格式的資料,從python中解釋出來。
1.轉換為json格式
import json
a = {'name': 'eason', 'code': 1874}
res = json.dumps(a)
print(res)
{"name": "eason", "code": 1874}
2.將json格式資料轉換為二進位制資料
encode_str = res.encode('utf8')
print(encode_str)
b'{"name": "eason", "code": 1874}'
3.將二進位制資料重新接收後,再轉換為字串,json格式
json_str = encode_str.decode('utf8')
print(json_str)
{"name": "eason", "code": 1874}
4.將json格式資料返回原本資料格式
res1 = json.loads(json_str)
print(res1)
{'name': 'eason', 'code': 1874}
# 強調:不是所有的資料型別都支援序列化
""" json模組,pychrm內部程式碼自帶表格
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
"""
subprocess模組
import subprocess
subprocess 模組首先使用的是它的 run 方法,更高階的用法可以直接使用 Popen 介面。
-
args:表示要執行的命令。必須是一個字串,字串引數列表。
-
stdin、stdout 和 stderr:子程序的標準輸入、輸出和錯誤。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一個已經存在的檔案描述符、已經開啟的檔案物件或者 None。subprocess.PIPE 表示為子程序建立新的管道。subprocess.DEVNULL 表示使用 os.devnull。預設使用的是 None,表示什麼都不做。另外,stderr 可以合併到 stdout 裡一起輸出。
-
timeout:設定命令超時時間。如果命令執行時間超時,子程序將被殺死,並彈出 TimeoutExpired 異常。
-
check:如果該引數設定為 True,並且程序退出狀態碼不是 0,則彈 出 CalledProcessError 異常。
-
encoding: 如果指定了該引數,則 stdin、stdout 和 stderr 可以接收字串資料,並以該編碼方式編碼。否則只接收 bytes 型別的資料。
-
shell:如果該引數為 True,將通過作業系統的 shell 執行指定的命令。
今天小結
調整狀態,努力學習!