1. 程式人生 > 其它 >學習python,從入門到放棄(21)

學習python,從入門到放棄(21)

學習python,從入門到放棄(21)

os 模組

os 模組提供的就是各種 Python 程式與作業系統進行互動的介面,要是跟作業系統打交道。

import os
# 1.建立目錄(資料夾)
os.mkdir(r'aaa')  # 使用相對路徑 在當前執行檔案所在的路徑下建立一個aaa資料夾
os.mkdir(r'bbb/ccc')  # mkdir只能建立單級目錄
os.makedirs(r'ccc')  # makedirs可以建立單級目錄
os.makedirs(r'bbb/ccc/ddd')  # makedirs支援建立多級目錄
import os
# 2.刪除目錄(資料夾)
os.rmdir(r'aaa')  # 可以刪除單級目錄
os.rmdir(r'bbb')  # 只能刪空的單級目錄
os.removedirs(r'ccc')  # 可以刪除單級目錄
os.removedirs(r'C:\pythonProject02\aaa\bbb\ccc\ddd')  # 刪除目錄之後如果外層的目錄也是空的則繼續刪除
# 3.檢視某個路徑下所有的檔名稱(檔案、資料夾)
print(os.listdir())
print(os.listdir(r'/Users'))
# 4.刪除檔案、重新命名檔案
os.remove(r'a.txt')
os.rename(r'a.txt', r'aaa.txt')
# 5.獲取當前路徑、切換路徑
print(os.getcwd())
os.chdir(r'C:\python')
print(os.getcwd())
# 6.軟體開發目錄規範 啟動指令碼相容性操作
os.path.dirname(__file__)  # 動態獲取當前執行檔案所在的絕對路徑
os.path.dirname(os.path.dirname(__file__))  # 每巢狀一層就是往上切換一層
print(os.path.abspath(__file__))  # 動態獲取當前執行檔案自身的路徑
# 7.判斷檔案是否存在
print(os.path.exists(r'bbb'))  # True  判斷所給的路徑是否存在
print(os.path.exists(r'file.py'))  # True  判斷所給的路徑是否存在
print(os.path.isdir(r'bbb'))  # True  判斷路徑是否是一個資料夾
print(os.path.isdir(r'file.py'))  # False  判斷路徑是否是一個資料夾
print(os.path.isfile(r'bbb'))  # False  判斷路徑是否是一個檔案
print(os.path.isfile(r'file.py'))  # True  判斷路徑是否是一個檔案
# 8.拼接路徑(極容易忽略)
base_dir = 'bbb'
exe_dir = 'file.py'
'''拼接成py檔案的路徑'''
print(base_dir + '/' + exe_dir)  # 路徑分隔符在不同的系統下是不一樣的  使用加號的話相容性極差
res = os.path.join(base_dir, exe_dir)  # 能夠自動識別當前作業系統的分隔符
print(res)
# 9.獲取檔案大小(位元組  bytes)
print(os.path.getsize(r'bbb'))  # 0bytes
print(os.path.getsize(r'a.txt'))  # 55bytes

sys模組

該模組提供了一些介面,用於訪問 Python 直譯器自身使用和維護的變數,同時模組中還提供了一部分函式,可以與直譯器進行比較深度的互動,主要是跟python直譯器打交道。

import sys
# 1.列舉當前執行檔案所在的sys.path
print(sys.path)
# 2.獲取直譯器版本資訊
print(sys.version)
# 3.獲取平臺資訊
print(sys.platform)
# 4.自定義命令列操作
print(sys.argv)
try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('請輸入使用者名稱和密碼')
else:
    if username == '666' and password == '123':
        print('可以正常執行該檔案')
    else:
        print('使用者名稱或密碼錯誤 沒有該檔案的執行許可權')
        
'''
PS C:\pythonProject02\aaa> python 'file.py' 666 123
['file.py', '666', '123']
可以正常執行該檔案
PS C:\pythonProject02\aaa> python 'file.py' 666 124
['file.py', '666', '124']
使用者名稱或密碼錯誤 沒有該檔案的執行許可權
'''

json 模組

json 模組是 python 中的一個編碼和解碼 json 格式的輕量級模組,主要用於將 python 物件編碼為 json 格式輸出或儲存,以及將 json 格式物件解碼為 python 物件。

json 格式資料是不同變成語言之間資料互動的媒介。json 格式資料本質屬於字串型別。

import json

d = {'username': '666', 'pwd': 123}
print(d, type(d))  # {'username': '666', 'pwd': 123} <class 'dict'>
res = json.dumps(d)
print(res, type(res))  # {"username": "666", "pwd": 123} <class 'str'>
print(str(d), type(str(d)))  # {'username': '666', 'pwd': 123} <class 'str'>

雙引號是json格式資料獨有的標誌符號。

json.dumps() 用於序列化,將python資料型別轉換成json格式字串
json.loads() 用於反序列化,將json格式字串轉換成對應的資料型別

import json

d = {'username': '666', 'pwd': 123}
res = json.dumps(d)
print(res, type(res))  # json格式字串
encode_str = res.encode('utf8')
'''假設將該字串基於網路發給了另外一個python程式'''
# 先將bytes型別轉換成字串
json_str = encode_str.decode('utf8')
print(json_str, type(json_str))
res1 = json.loads(json_str)
print(res1, type(res1))  # {'username': '666', 'pwd': 123} <class 'dict'>

json.dump() 將其他資料型別直接寫入檔案(自動序列化)
json.load() 將檔案資料直接轉成對應的資料型別(自動反序列化)

不是所有的資料型別都支援序列化

    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+

subprocess 模組

subprocess 模組允許你生成新的程序,連線到它們的 input/output/error 管道,並獲取它們的返回(狀態)碼。這個模組的目的在於替換幾個舊的模組和方法。該模組可以實現遠端操作其他計算機的功能,動態獲取命令執行並返回結果。

import subprocess

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'))  # 獲取錯誤命令執行之後的結果