1. 程式人生 > 其它 >os、json、sys、subprocess模組

os、json、sys、subprocess模組

os模組

import os
1.建立目錄(資料夾)
os.mkdir(r'a')  # 相對路徑 只能建立單級目錄
os.mkdirs(r'a\b')  # 可以建立單級和多及目錄
2.刪除目錄
os.mkdir(r'a')  # 只能刪除單級空目錄
os.removedirs()  # 可以刪除單級目錄
os.removedirs()   # 刪除目錄之後如果外層的目錄也是空的則繼續刪除  
3.檢視某個路徑下所有的檔名稱(檔案、資料夾)
os.listdir()
4.刪除檔案、重新命名檔案
os.remove(r'a.txt')
os.rename(r'a.txt', r'aaa.txt')
5.獲取當前路徑、切換路徑
os.getcwd()
os.chdir(r'\user\python')
6.軟體開發目錄規範 啟動指令碼相容性操作
os.path.dirname(__file__)  # 動態獲取當前執行檔案所在的絕對路徑  D\day21
os.path.dirname(os.path.dirname(__file__))  # 每巢狀一層就是往上切換一層  D\
os.path.abspath(__file__)  # 動態獲取當前執行檔案自身的路徑  D\day21\a.py
7.判斷檔案是否存在
os.path.exists(r'ATM')  # True  判斷所給的路徑是否存在
os.path.exists(r'01 作業講解.py')  # True  判斷所給的路徑是否存在
os.path.isdir(r'ATM')  # True  判斷路徑是否是一個資料夾
os.path.isfile(r'01 作業講解.py')  # True  判斷路徑是否是一個檔案
8.拼接路徑(極容易忽略)
base_dir = 'ATM'
exe_dir = '01 作業講解.py'
res = os.path.join(base_dir, exe_dir)  # 能夠自動識別當前作業系統的分隔符
9.獲取檔案大小(位元組  bytes)
print(os.path.getsize(r'ATM'))  # 128bytes
print(os.path.getsize(r'a.txt'))  # 14bytes

習題

# 選擇指定檔案並開啟瀏覽(目前只考慮文字檔案即可)

# 展示某個檔案下所有的檔名稱 使用者選擇哪個就開啟哪個
import os
# 1.先獲取目標檔案路徑(動態獲取 也可以省事先寫死)
target_path = os.path.dirname(__file__)
# 2.列舉該路徑下所有的檔名稱
full_path = os.path.join(target_path, '檔案集合')
file_list = os.listdir(full_path)
while True:
    # 3.迴圈展示每個檔名稱
    for i, j in enumerate(file_list, start=1):
        print(i, j)
    # 4.獲取使用者選擇的編號
    target_num = input('請輸入檢視檔案編號:').strip()
    # 5.判斷是否是純數字
    if target_num.isdigit():
        # 6.如果是純數字 轉換成整型
        target_num = int(target_num)
        # 7.判斷數字在不在數量範圍內
        if target_num in range(1, len(file_list)+1):
            # 8.獲取檔名稱
            file_name = file_list[target_num-1]
            # 9.拼接完整路徑
            full_file_path = os.path.join(full_path, file_name)
            # 10.檔案操作開啟檔案
            with open(full_file_path, 'r', encoding='utf8') as f:
                print(f.read())
        else:
            print('沒有編號的檔案')
    else:
        print('編號只能是數字')

sys模組

"""該模組主要是跟python直譯器打交道"""
import sys
# 1.列舉當前執行檔案所在的sys.path(掌握)
# print(sys.path)
# 2.獲取直譯器版本資訊(瞭解)
# print(sys.version)
# 3.獲取平臺資訊(瞭解)
# print(sys.platform)
# 4.自定義命令列操作
# print(sys.argv)
"""
cmd終端可以使用windows+r並輸入cmd喚起
也可以在pycharm直接使用快捷方式Terminal
    模擬cmd並自動切換到當前執行檔案所在的路徑下
"""

if len(sys.argv) == 3:  # 這裡的判斷也可以變成異常捕獲的形式
    username = sys.argv[1]
    password = sys.argv[2]
    if username == 'jason' and password == '123':
        print('可以正常執行該檔案')
    else:
        print('使用者名稱或密碼錯誤 沒有該檔案的執行許可權')
else:
    print('請輸入使用者名稱和密碼 不能漏寫或多寫')

 
try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('請輸入使用者名稱和密碼')
else:
    if username == 'jason' and password == '123':
        print('可以正常執行該檔案')
    else:
        print('使用者名稱或密碼錯誤 沒有該檔案的執行許可權')

json模組

'''json是一個序列化模組 主要用於跨語言傳輸資料'''
1.參考群內截圖得知json格式資料是不同變成語言之間資料互動的媒介
2.json格式資料的具體特徵
	結論1中有一個小細節>>>:資料基於網路傳輸肯定是二進位制格式
  在python中bytes型別的資料可以直接看成是二級制資料
  	python中哪些資料可以轉成bytes型別(編碼encode())
    	只有字串可以!
由上述推論可知 json格式資料 本質應該屬於字串型別

# 雙引號是json格式資料獨有的標誌符號!!!
import json
d = {'name': 'bob', 'pwd': 111}
print(d, type(d))
res = json.dumps(d)
print(res, type(res))

具體操作

"""
json.dumps()        序列化
    將python資料型別轉換成json格式字串
json.loads()        反序列化
    將json格式字串轉換成對應的資料型別
"""
import json
d = {'name': 'bob', 'pwd': 111}
# 將上述字典寫入檔案
with open(r'a.txt','w',encoding='utf8') as f:
     json.dump(d, f)
# 將檔案內容獲取出來
with open(r'a.txt','r',encoding='utf8') as f:
    data = json.load(f)
    print(data, type(data))
    
# 強調:不是所有的資料型別都支援序列化
"""
    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+
""" 

pickle模組

# 基本不用
	因為它不支援跨語言傳輸 只能識別python程式碼
'''直接忽略 不用掌握'''

subprocess模組

import subprocess

# dir在終端的意思就是檢視當前路徑下所有的檔名稱
res = subprocess.Popen('dir',
                       shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE
                       )
print('stdout', res.stdout.read().decode('utf8', 'ignore'))  # 獲取正確命令執行之後的結果
print('stderr', res.stderr.read().decode('utf8'))  # 獲取錯誤命令執行之後的結果
"""
該模組可以實現遠端操作其他計算機的功能
    動態獲取命令執行並返回結果
        eg:類似於Xshell軟體的功能
"""
"""
該模組可以實現遠端操作其他計算機的功能
    動態獲取命令執行並返回結果
        eg:類似於Xshell軟體的功能
"""