首页 > 解决方案 > 导入时相对路径和绝对路径出错

问题描述

我有以下文件夹结构

Tool -> Tool folder have following three subfolders
    inputfiles
    outputfiles
    soucefiles

sourcefiles have following files
       __init__.py
       main.py
       ParseLogFile.py

以下是 ParseLogFile.py 的内容

    class ParseLogFile:
        # initialize file name
        def __init__(self, filename):
            self.filename = filename
            return


def ParseLogFileFunc(self):
    print("ParseLogFileFunc called " + self.filename

)

以下是 main.py 的内容

from sourcefiles.ParseLogFile import ParseLogFile

parseFile = ParseLogFile("logfile")
parseFile.ParseLogFileFunc()

如果我使用以下,那么它正在工作

    from ParseLogFile import ParseLogFile

parseFile = ParseLogFile("logfile")
parseFile.ParseLogFileFunc()

但我试图了解导入的绝对和相对路径

问题一:

当我像上面那样给出绝对路径时,我得到了以下错误

 from sourcefiles.ParseLogFile import ParseLogFile

如果我在文件上方运行,即 main.py,我会收到以下错误。

ModuleNotFoundError: No module named 'sourcefiles'

我们如何使用绝对路径纠正这个错误?

问题2:如果我使用相对路径

from .ParseLogFile import ParseLogFile

parseFile = ParseLogFile("logfile")
parseFile.ParseLogFileFunc()

如果我在文件上方运行,即 main.py,我会收到以下错误。

ModuleNotFoundError: No module named '__main__.ParseLogFile'; '__main__' is not a package

问题 3:如何通过在 python 中提供相关路径来打开文件,例如在“inputfiles”文件夹中的输入文件中。

我是 python 新手,并试图以实际项目中使用的实际方式学习 python。请帮忙。我正在使用 python 3.x 和 anaconda 的 spyder 工具进行开发

标签: pythonpython-3.x

解决方案


Q1 & Q2 可以用一种解释来回答。- 你的“main.py”和“ParseLogFile.py”是一样的,这就是为什么你可能已经知道直接从导入工作但是当你从你身边给出相对路径时它可能是正确的,但是python以另一种方式接受相对或绝对路径的情况总是在 python 中使用 os lib。大多数情况下,硬编码路径会产生问题。

Q3 import os dir_path = os.path.dirname(os.path.realpath( file ))

或者你可以用同样的方法得到绝对路径。


推荐阅读