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

python之模組(os、sys、json、subprocess)

目錄

os模組

os模組主要是與作業系統打交道。

匯入os模組

import os

建立單層資料夾,路徑必須要存在

os.mkdir(路徑/資料夾名)
"""不寫路徑就是在當前目錄建立資料夾"""

建立多層資料夾,路徑不存在會自動建立資料夾

os.makedirs(路徑/資料夾名/資料夾名...)
"""不寫路徑就是在當前目錄建立資料夾"""

刪除一層空的資料夾

os.rmdir(路徑/資料夾名)
"""不寫路徑就是在當前目錄刪除資料夾"""

刪除多層空資料夾,刪除一層資料夾後,如果上一級的資料夾是空的,會一直刪除上一級資料夾直到資料夾不為空

os.removedirs(路徑/資料夾名)
"""不寫路徑就是在當前目錄刪除資料夾"""

檢視某個路徑下所有的檔名稱

os.listdir(路徑)
"""不寫路徑就是在當前目錄"""

刪除檔案(無法刪除資料夾)

os.remove(檔名)
"""不寫路徑就是在當前目錄"""

重新命名檔案(無法重新命名資料夾)

os.rename(檔名,新檔名)
"""不寫路徑就是在當前目錄"""

返回當前路徑

os.getcwd()

改變當前路徑

os.chdir(路徑)

返回當前執行檔案所在的絕對路徑

os.path.dirname(__file__)  # 固定搭配
# 每巢狀一層就會往上一層路徑
os.path.dirname(os.path.dirname(__file__))  

返回當前執行檔案自身的路徑

os.path.abspath(__file__)  # 固定搭配

判斷檔案是否存在(可以判斷資料夾和檔案)

os.path.exists(路徑)

判斷路徑是否是一個資料夾

os.path.isdir(路徑)

判斷路徑是否是一個檔案

os.path.isfile(路徑)

拼接成路徑

os.path.join(路徑1, 路徑2)
"""路徑2最好不要用絕對路徑"""

返回檔案大小(單位:位元組),如果路徑是資料夾,返回值為0

os.path.getsize(路徑)

判斷路徑是否是一個資料夾

os.path.isdir(路徑)

在cmd視窗執行括號內的命令,直接顯示

os.system(命令)
# 如
os.system('dir')  # 獲取當前目錄資訊

在cmd視窗執行括號內的命令,獲取執行結果

os.popen(命令).read()

把執行檔案與所在路徑分開儲存在元組中

os.path.split(__file__)  # 固定搭配

檔案時間問題

os.path.getatime(path)  # 返回path所指向的檔案或者目錄的最後訪問時間
os.path.getmtime(path)  # 返回path所指向的檔案或者目錄的最後修改時間

sys模組

sys模組主要是跟python直譯器打交道

匯入模組

import sys

以列表形式返回當前執行檔案所在的sys.path

sys.path

自定義命令列操作

sys.argv
"""
在cmd視窗中執行py檔案:python py檔案 命令1 命令2 ...
輸出:[py檔名, 命令1, 命令2, ...]
"""
sys.argv[0]  # 返回py檔名
sys.argv[1]  # 返回第一個命令
sys.argv[2]  # 返回第二個命令
...

返回直譯器版本資訊

sys.version

獲取平臺資訊

sys.platform

正常退出程式後輸出內容

sys.exit(內容)  # 程式正常退出才會輸出

json模組

json是什麼?

json是一個序列化模組,主要用於跨語言傳輸資料。json格式的資料是不同程式語言之間資料互動的媒介,基本上每個程式語言都能識別json格式的資料,識別的過程叫做反序列化。

json本質上是字串型別的,在python中,它的格式與字典極其相似。

字典的資料格式:

{'username':'abc','age':18}

json資料格式:

{"username": "abc", "age": 18}

可以看到,它們的區別就在引號上,雙引號是json格式資料獨有的標誌符號。

json模組

匯入

import json

序列化:將資料轉換成json格式字串

json.dumps(要序列化的資料)

# 案例
d = {'username': 'abc', 'age': 18}
res = json.dumps(d)
print(res, type(res))
# 輸出:{"username": "abc", "age": 18} <class 'str'>

反序列化:將json格式字串轉換成對應的資料型別

json.loads(要反序列化的資料)

# 案例
d = '{"username": "abc", "age": 18}'
res = json.loads(d)
print(res, type(res))
# 輸出:{'username': 'abc', 'age': 18} <class 'dict'>

將資料轉成json格式字串後寫入檔案

json.dump(要序列化的資料, 檔名)

# 案例
d = {"username": "abc", "age": 18}  # json格式資料
with open(r'a.txt','w',encoding='utf8') as f:
    json.dump(d, f)

將儲存json格式字串的檔案讀取後轉成對應的資料型別

json.load(檔名)

# 案例
with open(r'a.txt','r',encoding='utf8') as f:
    print(json.load(f))

可以被序列化的資料型別可以檢視JSONEncoder的原始碼

subprocess模組

subprocess模組可以實現遠端操作其他計算機的功能,會在cmd視窗執行命令,動態獲取命令執行並返回結果。

匯入模組

import subprocess

run()方法

subprocess.run(args, *, stdin=None, input=None, stdout=None,
stderr=None, capture_output=False, shell=False, cwd=None,
timeout=None, check=False, encoding=None, errors=None,
text=None, env=None, universal_newlines=None)

來自菜鳥教程:

  • args:shell命令,可以是字串或者序列型別(如:list,元組)
  • bufsize:緩衝區大小。當建立標準流的管道物件時使用,預設-1。
    0:不使用緩衝區
    1:表示行緩衝,僅當universal_newlines=True時可用,也就是文字模式
    正數:表示緩衝區大小
    負數:表示使用系統預設的緩衝區大小。
  • stdin, stdout, stderr:分別表示程式的標準輸入、輸出、錯誤控制代碼
  • preexec_fn:只在 Unix 平臺下有效,用於指定一個可執行物件(callable object),它將在子程序執行之前被呼叫
  • shell:如果該引數為 True,將通過作業系統的 shell 執行指定的命令。
  • cwd:用於設定子程序的當前目錄。
  • env:用於指定子程序的環境變數。如果 env = None,子程序的環境變數將從父程序中繼承。

Popen()方法

subprocess.Popen(args, bufsize=-1, executable=None, stdin=None,
stdout=None, stderr=None, preexec_fn=None, close_fds=True,
shell=False, cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0,restore_signals=True,
start_new_session=False, pass_fds=(),
*, encoding=None, errors=None)

# 執行ls命令
res = subprocess.Popen('ls',shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)

# 獲取正確命令執行之後的結果
res.stdout.read().decode('utf8')

# 獲取錯誤命令執行之後的結果
res.stderr.read().decode('utf8')

來自菜鳥教程:

  • args:shell命令,可以是字串或者序列型別(如:list,元組)
  • bufsize:緩衝區大小。當建立標準流的管道物件時使用,預設-1。
    0:不使用緩衝區
    1:表示行緩衝,僅當universal_newlines=True時可用,也就是文字模式
    正數:表示緩衝區大小
    負數:表示使用系統預設的緩衝區大小。
  • stdin, stdout, stderr:分別表示程式的標準輸入、輸出、錯誤控制代碼
  • preexec_fn:只在 Unix 平臺下有效,用於指定一個可執行物件(callable object),它將在子程序執行之前被呼叫
  • shell:如果該引數為 True,將通過作業系統的 shell 執行指定的命令。
  • cwd:用於設定子程序的當前目錄。
  • env:用於指定子程序的環境變數。如果 env = None,子程序的環境變數將從父程序中繼承。