目次
1. 前言
在使用 Python 進行程式設計時,「目前目錄(Current Directory)」 的概念非常重要。所謂目前目錄,是指程式正在執行的資料夾,也是 Python 讀取或寫入檔案時的參考位置。 例如,若在 Python 腳本中指定了「data/sample.txt」這樣的相對路徑,Python 會以該腳本的目前目錄為基準尋找這個檔案。因此,如果沒有正確理解目前目錄的概念,就可能發生找不到檔案的錯誤,或是不小心把資料儲存到錯誤的資料夾等問題。操作 Python 目前目錄的好處
在 Python 中取得或變更目前目錄,有以下幾個好處:1. 更順利地讀寫檔案
多數程式都需要讀寫資料檔案或設定檔。若能妥善管理目前目錄,腳本便能順利地從預期的資料夾讀取或儲存檔案。2. 正確區分相對路徑與絕對路徑
在 Python 中,檔案路徑可以使用相對路徑(例如:data/sample.txt)或絕對路徑(例如:C:/Users/username/project/data/sample.txt 或 /home/user/project/data/sample.txt)。若清楚掌握目前目錄,就能判斷何時使用哪一種方式比較合適。3. 更容易管理專案結構
在大型專案中,通常會跨多個資料夾。透過變更目前目錄,即使在不同的執行環境中,也能確保程式行為一致。本文將學到的內容
本篇文章將詳細說明如何在 Python 中取得、變更及列出目前目錄。只要依序學習以下內容,就能提升您操作目錄的能力:- 什麼是目前目錄?
- 如何取得目前目錄
- 如何變更目前目錄
- 如何取得目前目錄中的檔案列表
- 如何取得 Python 腳本所在的目錄
- 常見疑問(FAQ)與對應的解決方法
總結
在 Python 中管理目錄是操作檔案時不可或缺的基本知識。透過本篇文章的學習,相信您能加深對目錄操作的理解,進而順利進行程式開發。Ad
2. 什麼是目前目錄?
在使用 Python 操作檔案時,正確理解「目前目錄(Current Directory)」的概念非常重要。本章將詳細說明目前目錄的定義及其作用。目前目錄是什麼?
「目前目錄」指的是 Python 腳本當前執行時所依據的資料夾。當 Python 程式被執行時,會以這個目前目錄為基準,來處理相對路徑的檔案操作。 舉個例子,請看以下這段 Python 程式碼:file_path = "data/sample.txt"
with open(file_path, "r") as file:
content = file.read()這段程式碼中使用的是 data/sample.txt 這個相對路徑。在這種情況下,Python 會尋找 「目前目錄/data/sample.txt」 的路徑。也就是說,目前目錄設定在哪裡,會直接影響程式的行為。目前目錄的作用
由於目前目錄會影響 Python 程式的執行環境,因此在以下幾個面向中扮演重要角色:1. 作為相對路徑的基準
在 Python 中指定檔案路徑時,常見有兩種方式:相對路徑 與 絕對路徑。- 相對路徑:以目前目錄為基準的路徑
範例:
data/sample.txt(表示目前目錄中的data資料夾內的sample.txt檔案) - 絕對路徑:從根目錄開始的完整路徑
範例:
C:/Users/username/project/data/sample.txt(Windows) 範例:/home/user/project/data/sample.txt(Linux・Mac)
2. 可管理腳本的執行環境
目前目錄可能會因執行方式不同而有所變化,例如:| 執行方式 | 目前目錄的範例 |
|---|---|
| 透過命令列執行 | C:/Users/username/project/ |
| 使用 VSCode 或 PyCharm 執行 | 專案的根目錄 |
| 使用 Jupyter Notebook 執行 | Notebook 檔案所在的資料夾 |
透過 os.chdir() 修改 | 使用 os.chdir("/new/path/") 可更改為指定資料夾 |
3. 有助於管理整體專案
以下是一個典型的 Python 專案資料夾結構:/home/user/project/
├── main.py # 執行用的腳本
├── data/
│ ├── sample.csv
│ └── config.json
├── logs/
│ ├── app.log
└── src/
├── module1.py
├── module2.py在這樣的結構下,若能妥善設定目前目錄,就能順利進行檔案讀寫。尤其在大型專案中,經常會使用 os.chdir() 來統一操作路徑。如何確認目前目錄
在 Python 中,可以使用os.getcwd() 或 Path.cwd() 來取得目前的工作目錄。 ✅ 使用 os 模組的方法import os
current_directory = os.getcwd()
print("目前的目錄:", current_directory)✅ 使用 pathlib 模組的方法(推薦)from pathlib import Path
current_directory = Path.cwd()
print("目前的目錄:", current_directory)pathlib 是 Python 3.4 之後新增的模組,具備物件導向且易於操作的特性,因此推薦在新專案中使用。總結
- 目前目錄是 Python 腳本參考的根目錄。
- 了解相對路徑與絕對路徑的差異,並靈活運用是關鍵。
- 因應不同的執行環境,應有意識地管理目前目錄。
- 可透過
os.getcwd()或Path.cwd()確認目前目錄。
3. 如何取得目前目錄
在 Python 中,有幾種方式可以取得目前的工作目錄,最常用的是使用os 模組 和 pathlib 模組。本章將詳細介紹這兩種方法,並比較它們之間的差異。什麼是取得目前目錄?
所謂「取得目前目錄」,是指確認 Python 腳本執行時所參考的資料夾位置。這對於檔案的讀取與寫入,以及管理執行環境來說都非常關鍵。 例如,在執行以下這段 Python 程式時,了解目前目錄是什麼就變得非常重要:file_path = "data/sample.txt"
with open(file_path, "r") as file:
content = file.read()這段程式碼使用了相對路徑 data/sample.txt,而這個路徑的起點會根據目前目錄而改變。因此,明確了解目前目錄是什麼位置,是避免錯誤的關鍵。1. 使用 os 模組取得目前目錄
Python 的內建模組 os 提供了簡單的方式來取得目前目錄。✅ 使用 os.getcwd()
import os
current_directory = os.getcwd()
print("目前的目錄:", current_directory)✅ 輸出範例(Windows)
目前的目錄: C:\Users\username\project✅ 輸出範例(Mac/Linux)
目前的目錄: /home/user/project重點說明os.getcwd()會傳回絕對路徑(完整路徑),方便確認目前所在位置。os是 Python 標準函式庫的一部分,無需額外安裝。
2. 使用 pathlib 模組取得目前目錄
自 Python 3.4 起,官方推薦使用 pathlib 來處理路徑。這是一個提供物件導向操作路徑的模組。✅ 使用 Path.cwd()
from pathlib import Path
current_directory = Path.cwd()
print("目前的目錄:", current_directory)✅ 輸出範例
目前的目錄: /home/user/project重點說明Path.cwd()與os.getcwd()功能相同,都會傳回絕對路徑。- 使用
Path物件可以更直覺地處理檔案路徑,與其他pathlib功能結合也更方便。 pathlib僅支援 Python 3.4 以上版本,無法在 Python 2 中使用。
3. 比較:os.getcwd() vs Path.cwd()
若不確定該使用哪一種方法,以下比較表能幫助您做出選擇:| 項目 | os.getcwd() | Path.cwd() |
|---|---|---|
| 回傳類型 | 字串(str) | Path 物件 |
| 簡潔程度 | 簡單、易懂 | 物件導向,更直覺 |
| 適用場景 | 舊專案、Python 2 環境 | Python 3.4 以上的新專案 |
| 路徑操作 | 需搭配 os.path.join() | 可直接使用 Path 方法操作 |
| 擴充性 | 傳統方式,適用於一般需求 | 適合與其他 pathlib 功能結合使用 |
- 新專案建議使用 →
Path.cwd() - 需維持與舊程式碼相容 →
os.getcwd()
4. 取得目前目錄時的注意事項
- 在 Jupyter Notebook 中無法使用
__file__
- 雖然
os.getcwd()與Path.cwd()可正常運作,但__file__在 Notebook 中會出現錯誤。
- 不同執行環境的目前目錄可能不同
- 例如 VSCode 的終端機與 Windows 命令提示字元中執行,可能有不同的目錄設定。
- 使用
os.chdir()改變目前目錄後,os.getcwd()的值會更新
- 更改目前目錄後,所有的相對路徑將以新目錄為基準,需特別注意。
總結
- 在 Python 中,可透過
os.getcwd()或Path.cwd()來取得目前目錄。 os.getcwd()簡單易用,與舊程式碼相容性高。Path.cwd()是pathlib模組的一部分,適合物件導向操作。- 新專案建議使用
Path.cwd()。 - 執行環境不同可能會導致目前目錄不同,需特別留意。
Ad
4. 如何變更目前目錄
在 Python 中,可以變更目前目錄(即當前的工作資料夾)。當你希望操作特定資料夾內的檔案,或想統一執行環境時,變更目前目錄會非常有幫助。本章將說明如何變更目前目錄及需要注意的事項。1. 使用 os.chdir() 變更目前目錄
要變更目前目錄,可以使用 os 模組的 os.chdir() 函式。✅ os.chdir() 的基本用法
import os
# 顯示變更前的目前目錄
print("變更前的目前目錄:", os.getcwd())
# 變更目前目錄
os.chdir("/path/to/new/directory") # 指定要切換的目錄
# 顯示變更後的目前目錄
print("變更後的目前目錄:", os.getcwd())✅ 執行結果(確認變更前後)
變更前的目前目錄: /home/user/project
變更後的目前目錄: /home/user/project/new_folder重點說明- 使用
os.chdir("路徑")可在程式執行中動態變更工作資料夾。 - 變更後的所有相對路徑,都會以新目錄為基準。
2. 使用絕對路徑與相對路徑變更
在使用os.chdir() 時,可以使用絕對路徑或相對路徑來指定目錄。✅ 使用絕對路徑
os.chdir("/home/user/project/new_folder") # Linux / Mac
os.chdir("C:\\Users\\username\\project\\new_folder") # Windows- 指定完整路徑,適用於所有執行環境。
- 推薦使用方式,能避免混淆。
✅ 使用相對路徑
os.chdir("new_folder") # 切換至目前目錄下的 new_folder
os.chdir("../") # 返回上一層目錄
os.chdir("../../") # 返回上上層目錄- 以目前目錄為基準的相對路徑,有助於提升程式的可攜性。
- 但若目前目錄不清楚,可能導致預期外的行為。
3. 處理 os.chdir() 的錯誤
如果指定的資料夾不存在,Python 會拋出 FileNotFoundError。因此,在變更前應該先確認目錄是否存在。✅ 錯誤處理範例
import os
new_directory = "/path/to/nonexistent/directory"
# 確認資料夾存在後再變更
if os.path.exists(new_directory):
os.chdir(new_directory)
print("已變更目前目錄為:", os.getcwd())
else:
print("錯誤:指定的資料夾不存在")✅ 執行結果(當資料夾不存在時)
錯誤:指定的資料夾不存在重點說明- 使用
os.path.exists(路徑)確認目錄是否存在。 - 若目錄不存在,
os.chdir()會觸發FileNotFoundError,建議搭配條件或例外處理使用。
4. 將目前目錄變回原本的路徑
在變更目前目錄後,若需回到原本的路徑,可以先儲存初始目錄,再於必要時切回。✅ 儲存原本的目前目錄
import os
# 儲存當前的目錄
original_directory = os.getcwd()
# 變更目錄
os.chdir("/path/to/new/directory")
print("變更後的目錄:", os.getcwd())
# 回到原本的目錄
os.chdir(original_directory)
print("已返回原本目錄:", os.getcwd())✅ 執行結果
變更後的目錄: /home/user/new_folder
已返回原本目錄: /home/user/project重點說明- 使用
os.getcwd()儲存目前目錄後,日後可以安全地切回。 - 當使用多個腳本時,若忘記回復目錄,可能導致檔案操作錯誤。
5. 注意 os.chdir() 的影響範圍
使用 os.chdir() 後,整個 Python 腳本的目前目錄都會被變更,可能會影響其他依賴路徑的處理。✅ 範例:變更目前目錄後發生錯誤
import os
# 切換目錄
os.chdir("/path/to/new/directory")
# 嘗試讀取位於原本目錄的檔案
with open("config.json", "r") as file:
config = file.read() # 可能發生 FileNotFoundError這段程式會因為 config.json 不在新目錄中而發生錯誤。變更目錄後的程式行為需要特別小心。總結
- 可以使用
os.chdir()來變更目前目錄。 - 使用絕對路徑較安全,相對路徑也可提升靈活性。
- 建議搭配條件判斷或錯誤處理,以防指定不存在的目錄。
- 變更前可先儲存原始目錄,方便日後還原。
os.chdir()的影響是全域的,需避免意外錯誤。
5. 如何取得目前目錄內的檔案清單
在 Python 中,可以列出目前目錄中的檔案與資料夾。透過這個功能,可以篩選出特定類型的檔案,或一次處理整個資料夾的內容。 本章將使用os 模組與 pathlib 模組,詳細介紹如何取得檔案清單。1. 使用 os.listdir() 取得檔案清單
Python 的 os 模組提供了 os.listdir() 函式,可用來列出指定目錄(預設為目前目錄)中的所有檔案與資料夾。✅ os.listdir() 的基本用法
import os
# 取得目前目錄中的檔案與資料夾
files_and_folders = os.listdir()
print("目前目錄內容:", files_and_folders)✅ 執行結果(範例)
目前目錄內容: ['file1.txt', 'file2.csv', 'images', 'script.py']重點說明os.listdir()會同時列出檔案與資料夾。- 列出的清單包含檔名及副檔名,如需篩選可自行處理。
2. 只取得檔案(排除資料夾)
os.listdir() 會列出所有項目,包括資料夾。若只想取得檔案,可以搭配 os.path.isfile() 使用。✅ 只列出檔案的寫法
import os
files = [f for f in os.listdir() if os.path.isfile(f)]
print("目前目錄中的檔案:", files)✅ 執行結果(範例)
目前目錄中的檔案: ['file1.txt', 'file2.csv', 'script.py']重點說明- 使用
os.path.isfile(f)可排除資料夾,只保留檔案。 - 透過串列生成式可寫得簡潔清楚。
3. 只取得特定副檔名的檔案
若只想列出特定格式的檔案(例如.txt 或 .csv),可利用條件篩選副檔名。✅ 範例:只列出 .txt 檔案
import os
txt_files = [f for f in os.listdir() if f.endswith('.txt')]
print(".txt 檔案清單:", txt_files)✅ 執行結果(範例)
.txt 檔案清單: ['file1.txt', 'notes.txt']重點說明- 使用
f.endswith('.txt')可篩選出特定副檔名的檔案。 - 可替換為
'.csv'、'.log'等其他格式。
4. 使用 pathlib 取得檔案清單
自 Python 3.4 起,pathlib 提供更直覺的物件導向方式來操作目錄與檔案。✅ 使用 Path.iterdir() 取得清單
from pathlib import Path
files_and_folders = list(Path.cwd().iterdir())
print("目前目錄內容:", files_and_folders)✅ 執行結果(範例)
目前目錄內容: [PosixPath('file1.txt'), PosixPath('file2.csv'), PosixPath('images'), PosixPath('script.py')]重點說明Path.cwd().iterdir()會傳回Path物件的清單,可用於進一步的操作。- 使用
list()轉換為串列更方便閱讀與處理。
5. 使用 pathlib 只列出檔案
Path.iterdir() 可搭配 is_file() 方法,只選出檔案。✅ 範例:只取得檔案
from pathlib import Path
files = [f for f in Path.cwd().iterdir() if f.is_file()]
print("目前目錄中的檔案:", files)✅ 執行結果(範例)
目前目錄中的檔案: [PosixPath('file1.txt'), PosixPath('file2.csv'), PosixPath('script.py')]重點說明is_file()方法可過濾掉資料夾,只留下檔案。Path物件也能讓後續的路徑處理更方便。
6. 比較:os.listdir() vs pathlib
| 方法 | 特色 | 推薦用途 |
|---|---|---|
os.listdir() | 簡潔快速 | 重視相容性時使用 |
os.path.isfile() | 可篩選出只有檔案 | 搭配 os.listdir() 使用 |
Path.iterdir() | 物件導向,語法直覺 | 使用 pathlib 時的最佳選擇 |
- 舊專案或講究簡潔 → 使用
os.listdir() - 新專案、喜歡物件導向 → 使用
pathlib.Path().iterdir()
總結
- 使用
os.listdir()可列出目前目錄中的所有檔案與資料夾。 - 搭配
os.path.isfile()可過濾出只有檔案。 - 使用
pathlib.Path().iterdir()提供更現代化的操作方式。
Ad
6. 如何取得執行中腳本的所在目錄
知道 Python 腳本本身存放在哪個資料夾,對於載入外部檔案或根據腳本位置進行處理非常重要。本章將說明如何取得腳本本身的目錄,並介紹幾種實用的應用方式。1. 使用 __file__ 取得腳本所在目錄
在 Python 中,可以透過特殊變數 __file__ 取得目前腳本的檔案路徑,進而取得其所在資料夾。✅ 基本寫法:使用 os.path
import os
# 取得腳本的絕對路徑
script_path = os.path.abspath(__file__)
# 取得腳本所在的資料夾
script_directory = os.path.dirname(script_path)
print("腳本的絕對路徑:", script_path)
print("腳本所在資料夾:", script_directory)✅ 執行結果(範例)
腳本的絕對路徑: /home/user/project/script.py
腳本所在資料夾: /home/user/project重點說明__file__是一個代表腳本自身路徑的特殊變數。os.path.abspath(__file__)取得絕對路徑,os.path.dirname()拿到目錄。
- 在 Jupyter Notebook 中無法使用
__file__,會出現錯誤。 - Notebook 中請使用
os.getcwd()代替。
2. 使用 pathlib 取得腳本所在目錄
Python 3.4 之後可以使用 pathlib 以更直覺的方式處理路徑。✅ 使用 pathlib 取得腳本目錄
from pathlib import Path
# 取得腳本所在資料夾
script_directory = Path(__file__).resolve().parent
print("腳本所在資料夾:", script_directory)✅ 執行結果(範例)
腳本所在資料夾: /home/user/project重點說明Path(__file__).resolve()可取得絕對路徑。.parent表示該路徑的上一層(也就是資料夾)。- 推薦在新專案中使用 pathlib 方式。
os 與 pathlib 比較| 方法 | 特性 | 推薦用途 |
|---|---|---|
os.path.dirname(os.path.abspath(__file__)) | 傳統方法 | 強調相容性 |
Path(__file__).resolve().parent | 物件導向、語法簡潔 | 新專案、現代 Python 開發 |
3. 將腳本所在目錄設為目前目錄
若希望程式在任意位置執行時都能正確讀取相對路徑檔案,可將腳本所在資料夾設定為目前目錄。✅ 使用 os.chdir() 設定目前目錄
import os
# 取得腳本目錄
script_directory = os.path.dirname(os.path.abspath(__file__))
# 設定為目前目錄
os.chdir(script_directory)
print("已設定為目前目錄:", os.getcwd())✅ 執行結果(範例)
已設定為目前目錄: /home/user/project重點說明- 將目前目錄設定為腳本所在位置,可確保使用相對路徑時行為一致。
- 非常適合需要跨平台、跨環境執行的腳本。
import os
# Notebook 中無法使用 __file__,改用目前目錄
script_directory = os.getcwd()
print("Notebook 中的目前目錄:", script_directory)4. 實用範例:依照腳本位置開啟檔案
可依據腳本位置讀取特定檔案,無論從哪個資料夾執行腳本都能正確運作。✅ 範例:開啟與腳本同一資料夾的檔案
import os
# 取得腳本所在目錄
script_directory = os.path.dirname(os.path.abspath(__file__))
# 合併路徑(data.txt)
file_path = os.path.join(script_directory, "data.txt")
# 開啟檔案
with open(file_path, "r") as file:
content = file.read()
print("檔案內容:", content)✅ 執行結果(範例)
檔案內容: 這是來自腳本所在資料夾的檔案內容。重點說明- 使用
os.path.join()或Path / "檔名"可組合路徑。 - 可提升程式的可攜性與穩定性。
總結
- 使用
__file__可取得腳本自身的路徑。 - 推薦使用
Path(__file__).resolve().parent搭配 pathlib 取得目錄。 - 可透過
os.chdir()將腳本目錄設為目前目錄,確保相對路徑正確運作。 - Jupyter Notebook 中無法使用
__file__,請使用os.getcwd()。 - 根據腳本位置開啟檔案能提升程式的可移植性。
Ad
7. 常見問題(FAQ)
以下整理了讀者在使用 Python 進行目前目錄相關操作時,可能會有的常見疑問。透過這些問答,你可以更深入理解實際開發中會遇到的情況與對應解法。Q1: os.getcwd() 和 os.path.abspath('.') 有什麼不同?
✅ 解答
os.getcwd():回傳目前的工作目錄(絕對路徑)。os.path.abspath('.'):將指定的路徑(此處是".")轉換為絕對路徑。
import os
print("os.getcwd():", os.getcwd())
print("os.path.abspath('.'):", os.path.abspath('.'))✅ 範例輸出os.getcwd(): /home/user/project
os.path.abspath('.'): /home/user/project- 大多數情況下兩者結果相同,但推薦直接使用
os.getcwd(),語意更清楚。
Q2: 使用 os.chdir() 變更目錄會影響整個程式嗎?
✅ 解答
- 是的,
os.chdir()會變更整個 Python 執行環境的目前目錄。 - 若程式中其他地方使用相對路徑,可能會因目錄改變而產生錯誤。
import os
print("變更前:", os.getcwd())
os.chdir('/tmp')
print("變更後:", os.getcwd())
# 嘗試讀取原目錄下的檔案
with open("config.json", "r") as file:
content = file.read() # 可能會出錯✅ 建議做法import os
original_directory = os.getcwd() # 儲存原始目錄
os.chdir('/tmp') # 臨時變更
# 執行一些操作...
os.chdir(original_directory) # 還原目錄
print("已還原目錄:", os.getcwd())- 若需要暫時變更目錄,請務必儲存並還原,以免造成錯誤。
Q3: pathlib 和 os,哪個比較好用?
✅ 解答
| 項目 | os 模組 | pathlib 模組 |
|---|---|---|
| 推出時期 | Python 初期版本就有 | Python 3.4 後新增 |
| 操作方式 | 字串與函式結合 | 物件導向,語法簡潔 |
| 路徑處理 | 需要 os.path.join() | 可以用 / 直接拼接 |
| 相容性 | 相容於 Python 2 | 僅支援 Python 3.4 以上 |
- 新專案 → 推薦使用
pathlib - 維護舊專案或需 Python 2 支援 → 使用
os
Q4: os.listdir() 會列出資料夾和檔案,我該怎麼只取得檔案?
✅ 解答
可以搭配os.path.isfile() 篩選出純檔案。 ✅ 範例(使用 os)import os
files = [f for f in os.listdir() if os.path.isfile(f)]
print("檔案清單:", files)✅ 範例(使用 pathlib)from pathlib import Path
files = [f for f in Path.cwd().iterdir() if f.is_file()]
print("檔案清單:", files)- 推薦使用
pathlib,可讀性更佳。
Q5: 為什麼使用 __file__ 時會出錯?
✅ 解答
__file__僅在「執行 .py 腳本」時可用。- 在 Jupyter Notebook 中
__file__不存在,會出錯。
import os
script_directory = os.getcwd()
print("Notebook 中的目前目錄:", script_directory)- Notebook 使用
os.getcwd()來取得目前目錄是最佳方式。
Q6: 不使用 os.chdir(),可以根據腳本位置讀取檔案嗎?
✅ 解答
可以,只要使用腳本的絕對路徑當作基準組合檔案路徑即可。 ✅ 範例(使用 os)import os
script_directory = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(script_directory, "data.txt")
with open(file_path, "r") as file:
content = file.read()✅ 範例(使用 pathlib,推薦)from pathlib import Path
script_directory = Path(__file__).resolve().parent
file_path = script_directory / "data.txt"
with file_path.open("r") as file:
content = file.read()- 使用
pathlib可大幅提升程式的可讀性與可維護性。
總結
os.getcwd()與os.path.abspath('.')都能取得目前目錄,但語意上前者更推薦。os.chdir()會改變全域執行目錄,務必小心操作並記得還原。- 現代開發中推薦使用
pathlib,尤其是 Python 3.4 以上的專案。 os.listdir()搭配os.path.isfile(),或使用Path.is_file()可過濾資料夾。- 在 Notebook 中無法使用
__file__,請使用os.getcwd()。 - 根據腳本路徑組合檔案路徑可避免使用
os.chdir(),提升穩定性。
Ad
8. 總結
本篇文章詳細介紹了 Python 中如何取得、變更、列出目前目錄(Current Directory) 的各種方法。在實務開發中,目錄操作是檔案處理與腳本管理不可或缺的知識。以下是各章節的重點回顧:1. 什麼是目前目錄?
- 目前目錄(工作目錄)是 Python 腳本執行時所參考的路徑基準。
- 若使用相對路徑,會以目前目錄為基準,因此若沒設定正確,可能導致找不到檔案。
2. 如何取得目前目錄
✅ 使用os 模組import os
print(os.getcwd()) # 取得目前目錄✅ 使用 pathlib 模組(推薦)from pathlib import Path
print(Path.cwd()) # 取得目前目錄os.getcwd() 與 Path.cwd() 比較| 方法 | 回傳值 | 推薦用途 |
|---|---|---|
os.getcwd() | 字串(str) | 舊程式碼、Python 2 相容 |
Path.cwd() | Path 物件 | 新專案、物件導向路徑操作 |
3. 如何變更目前目錄
✅ 使用os.chdir()import os
os.chdir("/new/directory") # 變更目錄- 變更目前目錄會影響後續所有使用相對路徑的操作。
- 記得在變更前儲存原始目錄,以便還原。
original = os.getcwd()
os.chdir("/new")
os.chdir(original)4. 如何列出目前目錄中的檔案
✅ 使用os.listdir()import os
print(os.listdir())✅ 使用 pathlibfrom pathlib import Path
print(list(Path.cwd().iterdir()))- 篩選特定副檔名:
txt_files = [f for f in Path.cwd().iterdir() if f.suffix == '.txt']
print(txt_files)5. 如何取得腳本自身所在目錄
✅ 使用osimport os
print(os.path.dirname(os.path.abspath(__file__)))✅ 使用 pathlib(推薦)from pathlib import Path
print(Path(__file__).resolve().parent)- 在 Jupyter Notebook 中無法使用
__file__,請改用os.getcwd()。
6. 常見問題(FAQ)重點整理
os.getcwd()與os.path.abspath('.')類似,但os.getcwd()更具可讀性。os.chdir()會改變整個執行環境的目錄,建議變更前後記得儲存與還原。- Python 3.4 以上的專案建議使用
pathlib(語法更簡潔、可讀性更高)。 os.listdir()搭配os.path.isfile()或Path.is_file()可過濾資料夾。- 根據腳本的絕對位置處理檔案,可避免使用
os.chdir()而產生問題。
7. 適用情境
- 需處理檔案的 Python 程式(如資料分析、日誌寫入、爬蟲等)。
- 希望提升程式的可攜性與穩定性。
- 針對不同執行環境進行目錄管理(例如 VSCode、命令列、Notebook)。




