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 中管理目錄是操作檔案時不可或缺的基本知識。透過本篇文章的學習,相信您能加深對目錄操作的理解,進而順利進行程式開發。
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()
。 - 執行環境不同可能會導致目前目錄不同,需特別留意。
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()
提供更現代化的操作方式。
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
重點說明
- 將目前目錄設定為腳本所在位置,可確保使用相對路徑時行為一致。
- 非常適合需要跨平台、跨環境執行的腳本。
✅ 在 Jupyter Notebook 中的替代方式
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()
。 - 根據腳本位置開啟檔案能提升程式的可移植性。
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__
不存在,會出錯。
✅ 在 Notebook 中的替代方案
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()
,提升穩定性。
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())
✅ 使用 pathlib
from 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. 如何取得腳本自身所在目錄
✅ 使用 os
import 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)。
8. 結語
學會操作 Python 的目前目錄,對於撰寫可靠的檔案處理程式是非常重要的技能。無論是讀取資料、寫入結果、還是管理專案結構,這些技巧都能大幅提升開發效率。
參考資料
希望本文能幫助你掌握 Python 中的目錄操作技巧,應用在各種實務開發中!🚀