很多人都會鼓勵初學者學寫 Python 的原因是因為 Python 的 有很多非常好用的 libraries/framework,尤其是在一些圖像處理(OpenCV,Pillow)、機器學習/深度學習(Keras,PyTorch)、網頁架構(Django,Flask)等等。但是我們在套用這些套件前,讓我們先來看看怎樣使用一些 Python 一些內建就安裝好的模組吧~
在還沒有開始前我們先來看 Python 裡面如何 import
模組。基本上我們可以直接 import
模組(1);我們也可以選擇 import
模組裡面的其中一個 method(2);最後也可以更改程式碼裡呼叫模組裡的名稱,這個舉動叫 aliasing(3)。當然,我們通常都會統一更改的名稱...
import math #(1)
from random import seed #(2)
import math.e as euler #(3)
# Python 的 math 模組裡面還有很多很有趣的函式可以自己玩玩看哦~
sys
我們先來看一個系統模組,這裡的系統指的是 Python 的軟體,而不是作業系統(os)。當我們的程式碼需要讀取使用者所傳入的 arguments 時,input()
只會在呼叫 Python 之後向使用者 prompt 一個 string;這時我們可以用 sys.argv
對使用者的 input 做指定的動作(很多 Python library 都是這樣設計的哦~
import sys
print(sys.argv)
# 如果我們執行這個檔案的時候輸入以下的指令
# python test.py -x /path/to.py
# 它就會回傳 ['test.py', '-x', '/path/to.py']
print(sys.executable) # 回傳 Python Interpreter 的路徑
print(sys.path) # 回傳 Python Modules 的路徑
print(sys.platform) # 回傳使用者的作業系統環境
sys.exit() # 基本上就是我們在 Python interpreter 裡推出的時候下的 exit()
sys.stdin/stdout/stderr
這系列的 submodule (module class 裡面的 subclass)基本上都是 Python interpreter 的 io(input/output)相關函式。sys.stderr
其實跟 sys.stdout
基本上是一樣的東西,只是 Python 會在出現 exception 的時候使用 sys.stderr
。他其實跟 bash 裡面的 <
(input)>
(output)operator 很像。
import sys
path = 'C:\Users\Bird\sample.txt'
sys.stdin.readline(path) # 將檔案當成 stdin 來讀取,會包括一些像是 \n 的 escape sequence
sys.stdout.write('Hello, World!') # 相等於 print('Hello, World!')
# 我們也可以將 output 輸出到一個 file 裡面
sys.stderr = open('error.log', 'w') # 將 error log 輸出到一個文件
當然,我們會很常拿 sys
跟 os
互相使用。因此我們來看下一個模組吧~
os
相信大家應該多少對 CLI 有點熟悉度。基本上 os
這個模組大部分的指令都是跟作業系統操作相關,如:"mkdir", "rmdir"之類的指令。os
裡面大部分的指令也都是有這樣的功能哦~
import os
os.chdir(path) # cd
os.mkdir(dir_name) # mkdir
os.remove(file_name) # rm
os.rmdir(dir_name) # rm -r
os.rename(before, after) # rename
os.walk(path) # 基本上會從你指定的路徑爬出地下所有的檔案
是不是感覺還蠻相似呢?但是我們將會看 os
裡面一個更很常用到的 submodule,os.path
。Python 很常被拿來做一些雜事的自動化,而很多時候我們對會需要動用到一些檔案和路徑之類的資料。os.path
就是一個做這些事情的操作。
import os
path = 'C:\Users\Bird\sample.txt'
os.path.abspath() # 回傳目前為止的 absolute path
os.path.relpath() # 回傳目前為止的 relative path
os.path.basename(path) # 回傳檔案名稱 "sample.txt"
os.path.dirname(path) # 回傳目錄名稱 "C:\\User\\Bird\\"
os.path.exists(path) # 若存在會回傳 True
os.path.isdir(path) # 若是目錄回傳 True
os.path.isfile(path) # 若是檔案回傳 True
os.path.split(path) # 將目錄和檔案名稱分成一個 tuple ("C:\User\Bird", "sample.txt")
os.path.join(dir, file) # 將目錄和檔案名稱做 append
其他跟系統相關的套件還有 io
、subprocess
等可以自己去參考哦~