Python 工作目錄操作教學:取得、變更與列出目前目錄的完整指南

目次

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() 確認目前目錄
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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. 取得目前目錄時的注意事項

  1. 在 Jupyter Notebook 中無法使用 __file__
  • 雖然 os.getcwd()Path.cwd() 可正常運作,但 __file__ 在 Notebook 中會出現錯誤。
  1. 不同執行環境的目前目錄可能不同
  • 例如 VSCode 的終端機與 Windows 命令提示字元中執行,可能有不同的目錄設定。
  1. 使用 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 方式

ospathlib 比較

方法特性推薦用途
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: pathlibos,哪個比較好用?

解答

項目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 中的目錄操作技巧,應用在各種實務開發中!🚀