Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从不同文件夹导入模块_Python - Fatal编程技术网

Python 从不同文件夹导入模块

Python 从不同文件夹导入模块,python,Python,我的档案安排如下: python |--main.py |files |-----folder1 |-----a.py,a1.py..... |-----folder2 |-----b.py,b1.py.... 我想将模块a和b.py导入main.py。为此,我在main.py中使用了以下命令: a = 'C:/python/files/folder1'

我的档案安排如下:

    python
     |--main.py
     |files
        |-----folder1
                |-----a.py,a1.py.....
        |-----folder2
                |-----b.py,b1.py....
我想将模块a和b.py导入main.py。为此,我在main.py中使用了以下命令:

    a = 'C:/python/files/folder1'
    sys.path.insert(0, a)
    from files.folder1 import *
但是,我无法从folder1导入模块(类似于folder2)。 我得到一个错误:

    No module named files.folder1
我不能使用import命令,因为folder1、folder2…等中有许多python文件


我在这里遗漏了什么吗?

在Python 2.7中执行此操作时,我使用:

import sys
sys.path.append('C:/python/files/folder1')

import a
import a1
更新

下面是我为将目录中的所有模块导入字典而构建的一个hack:

import os
import sys

dir_of_interest = 'C:/python/files/folder1'
modules = {}

sys.path.append(dir_of_interest)
for module in os.listdir(dir_of_interest):
    if '.py' in module and '.pyc' not in module:
        current = module.replace('.py', '')
        modules[current] = __import__(current)

我刚建了它,非常粗糙,但它可能更像你想要的东西。因此,要访问您想要的模块,不要说
module\u name.thing
,而是说
modules[“module\u name”]。thing

如果您将
folder1
添加到路径中,这并不意味着您可以作为模块导入
folder1
。这意味着您可以导入folder1中的文件。所以你可以做:

import a
import a1
如果你想让
folder1
成为一个包,其中
a
a1
是模块,你需要在
folder1
中放置一个
\uu init\uuuuuuuuuuuuuuupy
,然后导入folder1。如果您还希望能够从folder1 import*执行
,并导入
a
a1
,则需要将代码放入导入
a
a1
初始化.py

如果您希望能够以结构化方式导入文件夹中的大量文件,则应将该文件夹制作成一个包

我不能使用import命令,因为folder1、folder2…等中有许多python文件。 我是不是遗漏了什么

我相信您缺少的部分是每个文件夹中的_uinit__;.py文件。该文件应包含一个uuu all uuuuu变量,该变量列出了将通过以下方式导入的所有子模块:
从somepackage.subpackage import*

这一切都在文章中得到了优雅的解释


希望这有帮助:-)

快速回答:

将文件
\uuuu init\uuuuu.py
(可以为空)添加到文件夹文件、文件夹1和文件夹2。然后您得到了一个包含子包folder1和folder2的包文件。之后,您可以从main.py导入,如下所示:

from files.folder1 import *

但是,我同意,如果您有大量文件,那么编写许多导入语句不是很麻烦吗?@user741592:为什么要将代码拆分为多个文件?您应该将相关的内容组合到一个模块中。不幸的是,需要拆分代码。我很乐意将区块分组到一个文件中。请参阅上面的编辑/破解。。。它可能更像你要找的东西。很好的直截了当的回答!假设我的文件夹结构类似于dataaccess.service/services.py,那么现在如何导入此路径?提供的参考链接确实很好地解释了这一点。