1. 程式人生 > 其它 >常用內建模組(二)

常用內建模組(二)

常用內建模組(二)

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軟體的功能
"""