在 Python 專案中使用相對路徑存取檔案
在 Python 專案中操作檔案時,為了方便起見,通常會使用相對路徑。然而,它們的行為可能變得不明確,特別是在處理多層次專案結構時。
考慮以下專案佈局:
project /data test.csv /package __init__.py module.py main.py
Module module.py 嘗試使用相對路徑讀取 ../data/test.csv 中的文件,但在執行 main.py 時,會出現錯誤,指示找不到該文件。這種明顯的不一致源於這樣一個事實:根據腳本的執行位置,相對路徑的解析方式不同。
對於 __init__.py 和 module.py,路徑是相對於包含這些的目錄進行評估的檔案。然而,對於 main.py 來說,路徑是相對於它自己的位置的。
解決路徑歧義
要解決這種歧義,可以使用絕對路徑。或者,更優雅的方法是利用 Python 的 __file__ 屬性:
from pathlib import Path
path = Path(__file__).parent / "../data/test.csv"
with path.open() as f:
test = list(csv.reader(f))
此技巧依賴 Python 3.4 pathlib 模組,並根據目前腳本的位置建構絕對路徑。
支援較舊的Python 版本
如果仍在使用低於3.4 的Python 版本,另一種方法是操作當前路徑:
import csv
import os.path
my_path = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(my_path, "../data/test.csv")
with open(path) as f:
test = list(csv.reader(f))
此方法結合了 os.path 函數以達到與基於 pathlib 的方法相同的結果。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3