National Chengchi University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try a Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

1

Local AI

--

Uedu Code

--

政治大學 AQI 61 23°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 19

標準模組:sys 與 os

命令列引數、模組搜尋路徑與檔案系統操作
Interaction實作導覽 20 minute(s)

Learning Objectives

  • 認識標準函式庫(Standard Library)、內建常數與內建函數
  • sys 模組:命令列引數 sys.argv、模組搜尋路徑 sys.path、sys.exit()
  • os 模組:os.getcwd()、os.listdir()、os.path 系列函數,以及更名與刪除檔案

標準函式庫:Python 內建的工具箱

安裝 Python 時就附帶了一套標準函式庫(Standard Library),涵蓋檔案、日期、數學、網路、文字處理等各種常見需求, import 就能用,不必另外安裝。其中有用 C 寫成、能存取系統功能的內建模組,也有用 Python 寫成的模組。

有些東西甚至不用 import:

  • 內建常數:True、False(布林值),以及 None(代表「沒有值」,類似其他語言的 null)
  • 內建函數:print()、len()、range()、type()、int()、open()、dir()、sorted()……共約 70 個

本課介紹兩個和「執行環境」最相關的模組:

模組 用途
sys 取得或修改 Python 執行時的環境資訊:命令列引數、模組搜尋路徑、結束程式
os 與作業系統互動的跨平台介面:目錄、檔案更名與刪除、路徑處理

暖身:內建常數 None

1.

下面的程式會印出什麼?

lst = ["apple", None, 77, "", 123]
for item in lst:
    if item is not None:
        print(repr(item), end=" ")
第 1 次作答

sys.argv:命令列引數

在終端機執行 python argv.py aaa bbb ccc 時,sys.argv 是一個串列:第一個元素一定是程式名稱,其餘依序是收到的引數,全部都是字串。CodeLab 沙盒裡程式名稱固定顯示為 main.py;下方可以改引數(一行一個)再跑一次。

sys.exit():提早結束程式

這支程式需要一個引數,這次執行時沒有給。sys.exit(2) 會引發 SystemExit 例外來結束程式,引數是結束碼(exit code):0 代表成功,非 0 代表有錯誤。下方在引數欄填一行 data 再跑一次。

sys.path 與 sys.version_info

上一課提過,import 依 sys.path 串列裡的順序尋找模組;第一個位置是主程式所在的目錄。sys.path 是普通的串列,程式執行中也可以加入新的搜尋路徑。

在終端機傳入命令列引數

CodeLab 用「引數」欄位模擬命令列;在自己的電腦上,是在終端機的程式名稱後面直接接上引數。下面的 argv.py 與 listdir.py 就是上面兩個動畫的程式。

  1. 1

    執行 argv.py 並傳入三個引數

    引數之間用空白隔開。這次 sys.argv[0] 是真正的程式名稱 argv.py。

  2. 2

    引數含有空白,或是數字

    用引號包起來的會算成一個引數;數字也是以字串傳進來,要計算時記得 int()。

  3. 3

    沒給引數:看結束碼

    listdir.py 需要一個目錄名稱。沒給時印出使用說明並 sys.exit(2)。在 macOS/Linux 用 echo $? 查看上一個程式的結束碼(Windows 命令提示字元用 echo %ERRORLEVEL%)。

  4. 4

    列出上一層目錄

    .. 代表上一層目錄,. 代表目前目錄。下面的檔案清單只是範例,會依你的電腦而不同。

  5. 5

    sys.platform 與 sys.version

    sys.platform 是平台識別字,例如 'linux'、'win32'、'darwin'(macOS);sys.version 是 Python 直譯器的版本與編譯資訊(每台電腦不同)。

這段導覽完成了

想一想:sys

1.

在終端機執行 python calc.py 3 5,程式裡 sys.argv[2] 是什麼?

2.

執行 python hello.py(沒有任何引數),len(sys.argv) 是多少?

第 1 次作答

os 模組:與作業系統互動

os 提供跨平台(portable)的作業系統功能;這些函數出錯時會引發 OSError 例外 (例如找不到檔案的 FileNotFoundError 就屬於 OSError)。

函數 說明
os.getcwd() 傳回目前的工作目錄(Current Working Directory)
os.chdir(dirname) 切換目錄到 dirname
os.listdir(dirname) 列出 dirname 裡的檔案與目錄名稱
os.mkdir(dirname)/os.rmdir(dirname) 建立目錄/刪除空的目錄
os.rename(src, dst) 將檔案或目錄 src 更名為 dst
os.remove(filename) 刪除檔案
os.path.exists()、isfile()、isdir() 檢查路徑是否存在、是不是檔案、是不是目錄
os.path.getsize() 檔案大小(位元組)
os.path.basename()、splitext()、join() 取出檔名、拆出副檔名、組合路徑

os.path.join('data', 'a.txt') 會依作業系統使用正確的分隔字元(Windows 是 \,其他是 /),比自己用字串相加安全。

os.listdir():列出目錄內容

這是投影片的 listdir.py,引數是 .(目前目錄)。工作目錄裡預先放了三個檔案。os.listdir() 傳回的順序不一定固定,所以先用 sorted() 排序。

os.path:路徑與檔案檢查

os.path 的函數大多只處理字串(例如 splitext、basename),不會真的去碰檔案;exists、isfile、getsize 則會去檢查實際的檔案系統。

os.rename() 與 os.remove()

工作目錄裡有 draft.txt 和 temp.txt。播完後看「檔案」分頁:剩下哪個檔案、叫什麼名字?

想一想:os.path

1.

下面的程式會印出什麼?

import os
print(os.path.splitext("photo.2026.jpg"))
2.

下面的程式會印出什麼?

import os
print(os.path.basename("data/2026/score.csv"))
3.

關於 os.listdir(".") 的傳回值,下面哪一個正確?

第 1 次作答

實作:列出所有 .txt 檔與大小

程式先建立了三個檔案。請用 os.listdir('.') 找出副檔名是 .txt 的檔案,排序後每個印一行「檔名 大小」,大小用 os.path.getsize() 取得。

你的輸出
預期輸出

重點精華回顧

  • 標準函式庫隨 Python 一起安裝,import 就能用;True、False、None 等內建常數與 print()、len() 等內建函數連 import 都不用。
  • sys.argv:命令列引數串列,sys.argv[0] 是程式名稱,引數一律是字串。
  • sys.path:模組搜尋路徑串列;sys.exit(結束碼) 引發 SystemExit 結束程式,0 代表成功;sys.platform、sys.version 是平台與版本資訊。
  • os.getcwd() 目前目錄、os.chdir() 切換目錄、os.listdir() 列出目錄內容、os.mkdir()/os.rmdir() 建立與刪除空目錄。
  • os.rename() 更名、os.remove() 刪除檔案;出錯時引發 OSError。
  • os.path 處理路徑:exists、isfile、isdir、getsize、basename、splitext、join。
這一課完成了!
Next lesson:正規表達式
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。