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

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


当前回答

importlib被添加到Python 3中以编程方式导入模块。

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

应该从moduleName中删除.py扩展名。该函数还为相对导入定义了一个包参数。

在python 2.x中:

只需导入文件,不带.py扩展名 通过添加一个空的__init__.py文件,可以将文件夹标记为包 你可以使用__import__函数,它将模块名(不带扩展名)作为字符串扩展名

pmName = input('Enter module name:')
pm = __import__(pmName)
print(dir(pm))

输入help(__import__)获取更多详细信息。

其他回答

from y import * 

假设你有一个文件x和y。 你想把y文件导入x。

然后转到您的x文件并放置上述命令。为了测试这一点,只需在y文件中放入一个打印函数,当导入成功时,在x文件中应该打印它。

第一个案例 你想导入文件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语法。

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

将python文件从一个文件夹导入到另一个文件夹的复杂方法并不多。只需要创建一个__init__.py文件来声明这个文件夹是一个python包,然后转到你想要导入的主机文件

从root。parent。folder。file导入变量,类,等等

导入python文件的方法有很多种,各有优缺点。

不要匆忙地选择第一个适用于您的导入策略,否则当您发现它不能满足您的需求时,您将不得不重写代码库。

我将从解释最简单的示例#1开始,然后转向最专业和最健壮的示例#7

例1,使用python解释器导入python模块:

把它放到/home/el/foo/fox.py: def what_does_the_fox_say (): 打印(“狐狸精”) 进入python解释器: el@apollo: / home / el / foo $ python Python 2.7.3(默认,Sep 26 2013, 20:03:06) >>> import fox > > > fox.what_does_the_fox_say () 狐狸精哭 >>> 您通过python解释器导入了fox,从fox.py中调用了python函数what_does_the_fox_say()。

例2,在脚本中使用execfile或(Python 3中的exec)来执行另一个Python文件:

把它放在/home/el/foo2/mylib.py: def moobar (): 打印(“嗨”) 把它放在/home/el/foo2/main.py中: execfile(“/ home / el / foo2 / mylib.py”) moobar () 运行文件: el@apollo:/home/el/foo$ python main.py 嗨 函数moobar从mylib.py导入,并在main.py中可用

例3,使用from…进口…功能:

把它放在/home/el/foo3/chekov.py: def问题(): 打印“核舰艇在哪里?” 把它放在/home/el/foo3/main.py中: 从契科夫进口问题 问题() 像这样运行它: el@apollo:/home/el/foo3$ python main.py 核潜艇在哪里? 如果你在chekov.py中定义了其他函数,它们将不可用,除非你导入*

例4,如果riaa.py位于不同的文件位置,则导入它

把它放到/home/el/foo4/stuff/riaa.py: def监视(): 打印“计算机正在转变为人类的套索和枷锁” 把它放在/home/el/foo4/main.py中: 导入系统 进口操作系统 sys.path.append (os.path.abspath(“/ home / el / foo4 /东西”)) 从riaa进口* 留神观察() 运行该程序: el@apollo:/home/el/foo4$ python main.py 计算机正在变成人类的绞索和枷锁 它从不同的目录导入外部文件中的所有内容。

例5,使用os。系统(“python yourfile.py”)

import os
os.system("python yourfile.py")

例6,通过装载python startuphook导入你的文件:

更新:此示例过去适用于python2和3,但现在只适用于python2。Python3摆脱了这个用户startuphook特性集,因为它被低技能的python库作者滥用,使用它不礼貌地将他们的代码注入到全局名称空间,在所有用户定义的程序之前。如果您想让它在python3中工作,就必须更有创造性。如果我告诉你怎么做,python开发人员也会禁用该功能集,所以你只能靠自己了。

参见:https://docs.python.org/2/library/user.html

将这段代码放到主目录~/.pythonrc.py中

class secretclass:
    def secretmessage(cls, myarg):
        return myarg + " is if.. up in the sky, the sky"
    secretmessage = classmethod( secretmessage )

    def skycake(cls):
        return "cookie and sky pie people can't go up and "
    skycake = classmethod( skycake )

把这段代码放到你的main.py(可以在任何地方):

import user
msg = "The only way skycake tates good" 
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")

运行它,你应该得到这个:

$ python main.py
The only way skycake tates good is if.. up in the sky, 
the skycookie and sky pie people can't go up and  have the sky pie! 
SKYCAKE!

如果你在这里得到一个错误:ModuleNotFoundError:没有名为'user'的模块,那么这意味着你正在使用python3,启动钩子默认是禁用的。

这篇文章的出处是:https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py请把你的小船送上来。

例7,最健壮的:在python中使用bare Import命令导入文件:

Make a new directory /home/el/foo5/ Make a new directory /home/el/foo5/herp Make an empty file named __init__.py under herp: el@apollo:/home/el/foo5/herp$ touch __init__.py el@apollo:/home/el/foo5/herp$ ls __init__.py Make a new directory /home/el/foo5/herp/derp Under derp, make another __init__.py file: el@apollo:/home/el/foo5/herp/derp$ touch __init__.py el@apollo:/home/el/foo5/herp/derp$ ls __init__.py Under /home/el/foo5/herp/derp make a new file called yolo.py Put this in there: def skycake(): print "SkyCake evolves to stay just beyond the cognitive reach of " + "the bulk of men. SKYCAKE!!" The moment of truth, Make the new file /home/el/foo5/main.py, put this in there; from herp.derp.yolo import skycake skycake() Run it: el@apollo:/home/el/foo5$ python main.py SkyCake evolves to stay just beyond the cognitive reach of the bulk of men. SKYCAKE!! The empty __init__.py file communicates to the python interpreter that the developer intends this directory to be an importable package.

如果你想看我关于如何在一个目录下包含所有.py文件的帖子,请参阅这里:https://stackoverflow.com/a/20753073/445131

有几种方法可以将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