常用內建模組(二)
阿新 • • 發佈:2022-03-30
常用內建模組(二)
os模組
'''該模組主要是跟作業系統互動''' import os # 1. 建立目錄 # os.mkdir(r'aaa') # 當前目錄建立單個空資料夾 # os.makedirs(r'bbb\ccc\ddd') # 當前目錄下建立多級空資料夾 # os.makedirs(r'aaa\bbb') # 在aaa資料夾中建立bbb資料夾 # 2. 刪除目錄 # os.rmdir(r'bbb') # OSError: [WinError 145] 目錄不是空的。: 'bbb' 只能刪除空資料夾 # os.rmdir(r'aaa') # 如果當前目錄的指定資料夾是空的,直接刪除 # os.removedirs(r'E:\python專案\課前預習草稿\bbb\ccc\ddd') # 刪除多級資料夾,從最裡面刪起,上一級如果是空的繼續刪,這裡要用絕對路徑,也可以刪除單級目錄 # 3.檢視某個路徑下的所有檔案 # print(os.listdir()) # 檢視當前目錄下檔案 # print(os.listdir(r'E:\python專案')) # 檢視指定目錄下檔案 # 4.刪除檔案、重新命名檔案 # os.remove(r'b.txt') # os.rename(r'user.txt',r'userinfo.txt') # 5. 獲取當前路徑、切換路徑 # print(os.getcwd()) # os.chdir(r'E:\python專案') # 切換到指定目錄 # print(os.getcwd()) # os.chdir(r'..') # 可以使用符號表示位置 # print(os.getcwd()) # 6.軟體開發目錄規範、啟動指令碼相容性操作 # 原理:動態獲取當前執行檔案所在路徑,拼接地址放進path中 # os.path.dirname(__file__) # 獲取當前檔案所在目錄 # os.path.dirname(os.path.dirname(__file__)) # 可以巢狀獲取 # os.path.abspath(__file__) # 獲取當前檔案位置,一直獲取到檔案本身 # 7. 判斷檔案是否存在 # print(os.path.exists(r'01.py')) # 判斷所給檔案路徑是否存在,存在返回Ture # print(os.path.isdir(r'01.py')) # 判斷所給檔案是否是一個資料夾,不是返回False # print(os.path.isfile(r'01.py')) # 判斷所給檔案是否是一個檔案,是返回Ture # 8.拼接路徑 # 不同作業系統路徑的分隔符是不一樣的,一味用加號拼接會導致程式碼相容性降低 # path_a = 'aaa' # path_b = 'bbb' # print(os.path.join(path_a,path_b)) # 根據當前系統自動匹配分隔符 # 9. 獲取檔案大小 # print(os.path.getsize(r'userinfo.txt')) # 48bytes 結果的單位是位元組
小練習
# 檢視目錄下所有檔案,並根據使用者選擇開啟 import os # 獲取所有檔案並整合成字典返回 def get_file(): res = os.listdir(r'txt') dict_file = {} num = 1 for i in res: dict_file[str(num)] = i num += 1 return dict_file # 開啟檔案,讀取內容 def open_file(file_path): with open(os.path.join('txt',file_path),'r',encoding='utf8') as f: file_str = f.read() return file_str # 使用者互動 dict_file = get_file() for i in dict_file: print(i,': ',dict_file[i]) num = input('請輸入需要開啟的檔案序號>>>').strip() print(open_file(dict_file[num]))
sys模組
'''該模組主要是跟python直譯器互動'''
import sys
# 1. 列舉當前執行檔案所在的path(掌握)
# print(sys.path)
# 2. 獲取當前python直譯器版本資訊
# print(sys.version)
# 3. 獲取平臺資訊
# print(sys.platform) # win32
# 4. 自定義命令列操作
# print(sys.argv) # 類似於cmd命令列,直接切換到當前檔案路徑
json模組
'''json是一個序列化模組 主要用於跨語言傳輸資料''' """ json格式資料的具體特徵 結論1中有一個小細節>>>:資料基於網路傳輸肯定是二進位制格式 在python中bytes型別的資料可以直接看成是二級制資料 python中哪些資料可以轉成bytes型別(編碼encode()) 只有字串可以!!! 由上述推論可知 json格式資料 本質應該屬於字串型別 """ # 雙引號是json格式資料獨有的標誌符號!!! import json # json和python字典型別相互轉換 # import json # d = {'name':'petter','age':18} # print(d,type(d)) # {'name': 'petter', 'age': 18} <class 'dict'> 字典型別 # jd = json.dumps(d) # print(jd,type(jd)) # {"name": "petter", "age": 18} <class 'str'> 字串型別,這個就是json格式 # d1 = json.loads(jd) # print(d1,type(d1)) # {'name': 'petter', 'age': 18} <class 'dict'> 又變回字典 # 基於網路傳輸檔案思想 ''' 由於網路傳輸只能是二進位制形式,所以必須把傳輸內容轉換成二進位制 字典>序列化>編碼成二進位制>傳輸>解碼>反序列化>字典 ''' # 模擬網路傳輸 # d = {'name':'petter','age':18} # # 1.序列化 # res = json.dumps(d) # # 2.編碼 # res1 = res.encode('utf8') # print(res1) # # 3.傳輸檔案,使用二進位制讀寫檔案模擬傳輸 # with open(r'txt\a.txt','wb')as f: # f.write(res1) # # 4.取檔案 # with open(r'txt\a.txt','rb')as f1: # res2 = f1.read() # # 5.解碼 # res3 = res2.decode('utf8') # # 6.反序列化 # res4 = json.loads(res3) # print(res4) """ 如果json模組需要配合檔案一起使用的話 有固定的方法 json.dump() 將其他資料型別直接寫入檔案(自動轉json格式字串) json.load() 將檔案資料直接轉成對應的資料型別(自動反序列化) """ # 強調:不是所有的資料型別都支援序列化 """ +-------------------+---------------+ | Python | JSON | +===================+===============+ | dict | object | +-------------------+---------------+ | list, tuple | array | +-------------------+---------------+ | str | string | +-------------------+---------------+ | int, float | number | +-------------------+---------------+ | True | true | +-------------------+---------------+ | False | false | +-------------------+---------------+ | None | null | +-------------------+---------------+ """
subprocess模組
import subprocess
# ls在終端的意思就是檢視當前路徑下所有的檔名稱
res = subprocess.Popen('ls',
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
print('stdout',res.stdout.read().decode('utf8')) # 獲取正確命令執行之後的結果
print('stderr',res.stderr.read().decode('utf8')) # 獲取錯誤命令執行之後的結果
"""
該模組可以實現遠端操作其他計算機的功能
動態獲取命令執行並返回結果
eg:類似於Xshell軟體的功能
"""