如何在Python中导入文件?我想导入:
文件(例如file.py) 一个文件夹 在运行时根据用户输入动态地生成文件 文件的特定部分(例如,单个函数)
如何在Python中导入文件?我想导入:
文件(例如file.py) 一个文件夹 在运行时根据用户输入动态地生成文件 文件的特定部分(例如,单个函数)
当前回答
这就是我从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)
其他回答
我想补充一点,我在其他地方不太清楚;在模块/包中,当从文件中加载时,模块/包名必须以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
有几种方法可以将python脚本包含在abc.py中
例如,如果你的文件名为abc.py(导入abc) 限制是你的文件应该和你调用的python脚本在同一个位置。
进口美国广播公司
例如,如果你的python文件在Windows文件夹中。Windows文件夹与调用python脚本的位置相同。
从文件夹导入ABC
在情况下abc.py脚本是可用的内部internal_folder,是在文件夹内
导入ABC
正如James上面所回答的,如果你的文件在某个固定的位置
进口操作系统 导入系统 scriptpath = "../Test/MyModule.py" sys.path.append (os.path.abspath (scriptpath)) 进口MyModule里
如果你的python脚本更新了,你不想上传-使用这些语句自动刷新。好处:)
%load_ext autoreload
%autoreload 2
这可能听起来很疯狂,但如果您只是为其创建包装器脚本,则可以创建到想要导入的文件的符号链接。
Python的一个非常不为人知的特性是导入zip文件的能力:
library.zip
|-library
|--__init__.py
该包的__init__.py文件包含以下内容:
def dummy():
print 'Testing things out...'
我们可以编写另一个脚本,它可以从zip归档文件中导入包。只需要将zip文件添加到sys.path。
import sys
sys.path.append(r'library.zip')
import library
def run():
library.dummy()
run()
第一个案例 你想导入文件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语法。
有关包和模块的更多信息,请参阅此链接。