导入的相对路径和绝对路径错误

时间:2018-08-16 13:58:41

标签: python python-3.x

我具有以下文件夹结构

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()

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

  

问题1:

当我像上面一样给出绝对路径时,我会遇到错误

 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和spyder工具进行开发

1 个答案:

答案 0 :(得分:0)

Q1和Q2可以用一种解释来回答。 -您的“ main.py”和“ ParseLogFile.py”是相同的,这就是为什么直接从导入直接运行的原因,您可能已经知道,但是当您提供相对路径时,它可能是正确的,但是python却采用了另一种方式相对路径或绝对路径的情况总是在python中使用os lib给出。对路径进行硬编码通常会造成问题。

第三季度 导入操作系统 dir_path = os.path.dirname(os.path.realpath(文件))

或者您可以通过相同的方式获得绝对路径。