在 Python 專案中使用相對路徑存取檔案
在 Python 專案中操作檔案時,為了方便起見,通常使用相對路徑。然而,它們的行為可能變得不明確,特別是在處理多層次專案結構時。
考慮以下項目佈局:
project /data test.csv /package __init__.py module.py main.py
模組module.py 嘗試讀取. ./data/test.csv 使用相對路徑,但是在運行main.py 時,出現錯誤,指示找不到該文件。這種明顯的不一致源於這樣一個事實:根據腳本的執行位置,相對路徑的解析方式不同。
對於 __init__.py 和 module.py,路徑是相對於包含這些的目錄進行評估的檔案。然而,對於 main.py 來說,路徑是相對於它自己的位置的。
解決路徑歧義
要解決這種歧義,可以使用絕對路徑。或者,更優雅的方法是利用 Python 的 __file__ 屬性:
<code class="python">from pathlib import Path path = Path(__file__).parent / "../data/test.csv" with path.open() as f: test = list(csv.reader(f))</code>
此技巧依賴 Python 3.4 pathlib 模組,並根據目前腳本的位置建構絕對路徑。
支援較舊的Python 版本
如果仍在使用低於3.4 的Python 版本,另一種方法涉及操作當前路徑:
<code class="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))</code>
此方法將os.path 函數結合到達到與基於pathlib 的方法相同的結果。
以上是為什麼Python專案中的相對路徑會導致檔案未找到錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!