如何通过绝对路径或相对路径获得正确路径

  • 本文关键字:路径 相对 何通过 python
  • 更新时间 :
  • 英文 :


我的文件结构如下:

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)

这更详细,也更容易理解。

最新更新