簡體   English   中英

如何通過絕對或相對路徑獲得正確的路徑?

[英]How do I get correct path by absolute or relative path?

我的文件結構如下:

kkg/
  builder/test.py
  builder/data
  api/api.py
  __init__py

'kkg' 是我的包名,在init .py 中定義了一些函數,這些函數的實現寫在 api.py 中。

在 test.py 中,我有:

import kkg
kkg.load('builder/data/')

在 api.py 的“負載”中,我有代碼:

abspath = os.path.abspath(os.path.dirname(__file__))
...

for file in files:
    file_path = os.path.join(abspath, data_path)

data_path 是從 test.py 傳遞的參數“builder/data/”。 path.join 報錯:

Caused by: java.io.FileNotFoundException: /Users/comin/kkg/kkg/api/data/people.csv 

如果正確解析,正確的數據路徑應該是:

/Users/comin/kkg/kkg/data/people.csv

我在 builder/ 目錄中運行“test.py”。 我認為生成的路徑中存在不必要的“api”的原因是因為 api.py 中發生錯誤的代碼段。

也許我不應該使用 join(abspath, data_path) 來獲取絕對目錄。 如何正確解析路徑?

編輯:

我更改了路徑參數:

kkg.load('../builder/data/')

但隨后這段代碼失敗了:

if not os.path.isdir(data_path):
        raise ValueError('data_path must be a directory, not file name!') 

為什么當我將“..”添加到路徑時會引發錯誤? 由於“..”,它不被視為目錄?

你想要我認為的父目錄

abspath = os.path.abspath(os.path.join(os.path.dirname(__file__),".."))

你似乎比你應該的更努力地解決這個問題......這樣做可能更容易

path_to_data_file_folder = os.path.abspath(sys.argv[1])

然后用python main.py /path/to/data/folder調用它

使用pathlib不是os庫要容易得多:

# api/api.py

from pathlib import Path

KKG_FOLDER = Path(__file__).parent.parent
DATA_FOLDER = KKG_FOLDER / 'builder/data'

print(DATA_FOLDER)

這更冗長,更容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM