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

时间:2020-11-07 06:07:12

标签: 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!') 

当我在路径中添加“ ..”时为什么会引发错误?由于存在“ ..”,因此不被视为目录。

2 个答案:

答案 0 :(得分:1)

您想要我认为的父目录

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

调用

答案 1 :(得分:1)

pathlib库中使用os要容易得多:

# api/api.py

from pathlib import Path

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

print(DATA_FOLDER)

这更冗长,更易于理解。