05 - 常用內建模組
os — 檔案系統操作
import os
os.getcwd() # 取得目前工作目錄
os.listdir(".") # 列出目錄內容
os.path.exists("file.txt") # 確認檔案是否存在
os.path.join("folder", "file.txt") # 組合路徑(跨平台安全)
os.makedirs("new/folder", exist_ok=True) # 建立資料夾math — 數學計算
import math
math.sqrt(16) # 4.0(開根號)
math.ceil(3.2) # 4(無條件進位)
math.floor(3.8) # 3(無條件捨去)
math.pi # 3.14159...
math.log(100, 10) # 2.0(log 以 10 為底)random — 隨機數
import random
random.random() # 0.0 到 1.0 的隨機浮點數
random.randint(1, 100) # 1 到 100 的隨機整數
random.choice([1, 2, 3]) # 隨機選一個元素
random.shuffle([1, 2, 3]) # 隨機打亂(in-place)
random.sample([1,2,3,4,5], 3) # 不重複抽取 3 個datetime — 日期時間
from datetime import datetime, date, timedelta
now = datetime.now()
print(now) # 2026-04-22 12:34:56.789
print(now.strftime("%Y-%m-%d")) # 2026-04-22
today = date.today()
yesterday = today - timedelta(days=1)
# 計算時間差
d1 = date(2026, 1, 1)
d2 = date(2026, 4, 22)
diff = d2 - d1
print(diff.days) # 111檔案讀寫(with open)
讀寫檔案一律用 with,它會在區塊結束時自動關檔(即使中途出錯),不會忘記 f.close():
# 寫檔("w" 會覆蓋整個檔案;encoding="utf-8" 處理中文必加)
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("第一行\n")
f.write("第二行\n")
# 讀檔
with open("notes.txt", "r", encoding="utf-8") as f:
content = f.read() # 一次讀成一個字串
# 一行一行讀(檔案很大時較省記憶體,推薦)
with open("notes.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip()) # strip() 去掉每行結尾的換行符
# 附加("a":接在檔尾,不覆蓋)
with open("notes.txt", "a", encoding="utf-8") as f:
f.write("補一行\n")| 模式 | 意義 |
|---|---|
"r" | 讀取(預設) |
"w" | 寫入(會清空原內容) |
"a" | 附加(接在檔尾) |
"x" | 建立新檔(檔案已存在會報錯) |
例外處理(try / except)
程式出錯時不要整個崩潰,而是「攔下來、好好處理」:
try:
age = int(input("年齡:")) # 使用者亂打字會出錯
result = 100 / age
except ValueError:
print("請輸入數字!") # int("abc") 會丟 ValueError
except ZeroDivisionError:
print("年齡不能是 0") # 除以 0 會丟 ZeroDivisionError
else:
print(f"結果:{result}") # 沒出錯才執行
finally:
print("不管有沒有錯都會跑") # 常用來收尾(關檔、釋放資源)常見錯誤型別:
| 例外 | 何時發生 |
|---|---|
ValueError | 值不合法,如 int("abc") |
TypeError | 型別不對,如 "a" + 1 |
KeyError | dict 取不存在的 key |
IndexError | list 索引超出範圍 |
FileNotFoundError | 開不存在的檔案 |
ZeroDivisionError | 除以 0 |
# 取得錯誤訊息 / 主動拋出例外
try:
raise ValueError("這是自訂錯誤訊息")
except ValueError as e:
print(f"攔到錯誤:{e}")不要用空的
except:把所有錯誤都吞掉——你會看不到真正的問題。盡量只攔「你預期會發生、且知道怎麼處理」的特定例外。
json — JSON 處理
import json
# dict → JSON 字串
data = {"name": "Andrew", "age": 28}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
# JSON 字串 → dict
parsed = json.loads(json_str)
# 讀寫 JSON 檔案
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)虛擬環境(venv)+ pip
不同專案常需要不同套件、甚至不同版本。虛擬環境讓每個專案有自己獨立的一套套件, 不會互相打架、也不會弄髒系統 Python。好習慣:每個新專案都先建一個 venv。
# 1. 在專案資料夾內建立虛擬環境(資料夾名慣例叫 venv 或 .venv)
python -m venv venv
# 2. 啟用(activate)
source venv/bin/activate # macOS / Linux
venv\Scripts\activate # Windows
# 啟用後命令列開頭會出現 (venv),代表現在在虛擬環境裡
# 3. 在裡面裝套件(只會裝到這個 venv,不影響系統)
pip install requests
# 4. 用完離開
deactivatepip 常用指令
pip install requests # 安裝套件
pip install requests==2.31.0 # 指定版本
pip install --upgrade requests # 升級
pip uninstall requests # 移除
pip list # 查看已安裝套件
# 產生 requirements.txt(記錄專案所有相依套件與版本)
pip freeze > requirements.txt
# 別人拿到你的專案,一鍵裝齊所有相依套件
pip install -r requirements.txt
requirements.txt+ venv 是 Python 專案的標準配備:別人 clone 你的專案,只要
python -m venv venv→ activate →pip install -r requirements.txt, 環境就跟你一模一樣。
常用第三方套件
| 套件 | 用途 |
|---|---|
requests | HTTP 請求(爬蟲、API) |
pandas | 表格 / 資料分析 |
numpy | 數值計算 |
matplotlib | 資料視覺化 |
flask | 輕量 Web 框架 |
selenium | 瀏覽器自動化 |
requests — 抓網頁 / 打 API(概念)
import requests
# GET:抓一個網址
resp = requests.get("https://api.github.com")
print(resp.status_code) # 200 代表成功
data = resp.json() # 若回傳是 JSON,直接轉成 dict
# 帶參數的 GET
resp = requests.get("https://example.com/search", params={"q": "python"})
# POST:送資料
requests.post("https://example.com/api", json={"name": "Andrew"})pandas — 用表格的方式處理資料(概念)
pandas 的核心是 DataFrame,可以想成程式版的 Excel 表格:
import pandas as pd
# 讀進一個 CSV / Excel
df = pd.read_csv("scores.csv")
df.head() # 看前 5 列
df["score"].mean() # 某欄平均
df[df["score"] >= 60] # 篩選(只留及格的列)
df.to_csv("out.csv", index=False) # 存回檔案這兩個套件初學階段「知道它們是做什麼的、看得懂範例」就夠了,需要時再深入查文件。
