【问题标题】:Importing Python files that are in a folder导入文件夹中的 Python 文件
【发布时间】:2015-05-08 18:04:53
【问题描述】:

我一直致力于创建自己的 .py 文件来存储该方法的处理程序的项目,我一直在尝试弄清楚如何将 Python 文件存储在文件夹中并打开它们。这是我用来创建文件的代码,如果它们不存在,然后导入文件:

if os.path.isfile("Btn"+ str(self.ButtonSet[self.IntBtnID].IntPID) +".py") == False:
        TestPy = open("Btn"+ str(self.ButtonSet[self.IntBtnID].IntPID) +".py","w+")
        try:
            TestPy.write(StrHandler)
        except Exception as Error:
            print(Error)
        TestPy.close()
    self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Btn" + str(self.IntBtnID))
    self.IntBtnID += 1

当我改变这一行时:

self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Btn" + str(self.IntBtnID))

到这里:

self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Buttons\\Btn" + str(self.IntBtnID))

无法找到填充并最终引发错误,因为它在文件夹中找不到文件。

知道为什么它不起作用我只是不知道如何解决这个问题:/

我的问题是 .py 存储在文件夹中时如何打开它?

【问题讨论】:

    标签: python file python-import relative-path


    【解决方案1】:

    您的代码中有一些不习惯的东西可能是您的问题的原因。首先,一般最好使用os.path中的函数来操作文件的路径。从您的反斜杠使用来看,您似乎是在 Windows 上工作,但 os.path 模块可确保所有平台的行为一致。

    还有importlib.import_module,通常比__import__ 更推荐。此外,如果您想在程序的生命周期内多次加载生成的模块,则必须使用imp.reload 显式执行此操作。

    最后一个提示:我会考虑模块路径以避免不得不在多个地方进行更改。

    【讨论】:

      【解决方案2】:

      您在导入文件时不能引用路径目录。相反,您希望将目录添加到您的path,然后导入模块的名称。

      import sys
      sys.path.append( "Buttons" )
      __import__("Btn"+str(self.IntBtnId))
      

      更多信息请参见this so question

      【讨论】:

        【解决方案3】:

        __import__() 函数的第一个参数是模块的名称,而不是它的路径。因此我认为你需要使用:

        self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Buttons.Btn" + str(self.IntBtnID))
        

        您可能还需要在Buttons 文件夹中放置一个空的__init__.py 文件,以表明它是一个模块包。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-13
          • 2018-08-19
          • 1970-01-01
          • 2023-02-02
          相关资源
          最近更新 更多