很多人都會鼓勵初學者學寫 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 輸出到一個文件

當然,我們會很常拿 sysos 互相使用。因此我們來看下一個模組吧~

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

其他跟系統相關的套件還有 iosubprocess等可以自己去參考哦~

Leave a Reply

Your email address will not be published. Required fields are marked *