如何在Python中导入文件?我想导入:

文件(例如file.py) 一个文件夹 在运行时根据用户输入动态地生成文件 文件的特定部分(例如,单个函数)


当前回答

第一个案例 你想导入文件A.py到文件B.py中,这两个文件在同一个文件夹中,就像这样:

. 
├── A.py 
└── B.py

你可以在文件B.py中这样做:

import A

or

from A import *

or

from A import THINGS_YOU_WANT_TO_IMPORT_IN_A

然后你就可以在B.py文件中使用A.py文件中的所有函数了


第二个案例 你想导入B.py文件中的/A.py文件夹,这两个文件不在同一个文件夹中,就像这样:

.
├── B.py
└── folder
     └── A.py

你可以在文件B.py中这样做:

import folder.A

or

from folder.A import *

or

from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A

然后你就可以在B.py文件中使用A.py文件中的所有函数了


总结

在第一种情况下,a .py文件是您在B.py文件中导入的模块,您使用了import module_name语法。 在第二种情况下,文件夹是包含模块A.py的包,您使用导入package_name.module_name语法。

有关包和模块的更多信息,请参阅此链接。

其他回答

如果函数定义在x.py文件中:

def greet():
    print('Hello! How are you?')

在导入函数的文件中,这样写:

from x import greet

如果您不希望导入文件中的所有函数,这是非常有用的。

这可能听起来很疯狂,但如果您只是为其创建包装器脚本,则可以创建到想要导入的文件的符号链接。

我想补充一点,我在其他地方不太清楚;在模块/包中,当从文件中加载时,模块/包名必须以mymodule作为前缀。想象我的模块是这样布局的:

/main.py
/mymodule
    /__init__.py
    /somefile.py
    /otherstuff.py

当从__init__.py加载somefile.py/otherstuff.py时,内容应该如下所示:

from mymodule.somefile import somefunc
from mymodule.otherstuff import otherfunc

导入.py文件的最佳方法是使用__init__.py。最简单的方法是在你的.py文件所在的目录下创建一个名为__init__.py的空文件。

Mike Grouchy的这篇文章很好地解释了__init__.py及其用于制作、导入和设置python包的用法。

这就是我从python文件调用函数的方式,这对我来说是灵活的,可以调用任何函数。

import os, importlib, sys

def callfunc(myfile, myfunc, *args):
    pathname, filename = os.path.split(myfile)
    sys.path.append(os.path.abspath(pathname))
    modname = os.path.splitext(filename)[0]
    mymod = importlib.import_module(modname)
    result = getattr(mymod, myfunc)(*args)
    return result

result = callfunc("pathto/myfile.py", "myfunc", arg1, arg2)