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

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


当前回答

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

其他回答

from file import function_name  ######## Importing specific function
function_name()                 ######## Calling function

and

import file              ######## Importing whole package
file.function1_name()    ######## Calling function
file.function2_name()    ######## Calling function

以下是我现在已经理解的两种简单方法,确保你想导入的“file.py”文件只存在于你的当前目录中。

有很多方法,如上所述,但我发现我只想导入文件的内容,而不希望必须写一行又一行,必须导入其他模块。因此,我想出了一种方法来获取文件的内容,甚至使用点语法(file.property),而不是将导入的文件与您的文件合并。 首先,这是我要导入的文件data。py

    testString= "A string literal to import and test with"

注意:您可以使用.txt扩展名。 在mainfile.py中,首先打开并获取内容。

    #!usr/bin/env python3
    Data=open('data.txt','r+').read()

现在您有了字符串形式的内容,但是正在尝试访问数据。testString将导致一个错误,因为data是str类的一个实例,即使它确实有一个属性testString,它也不会执行您所期望的操作。 接下来,创建一个类。例如(双关语),ImportedFile

    class ImportedFile:

然后把这个放进里面(用合适的缩进):

    exec(data)

最后,像这样重新分配数据:

    data=ImportedFile()

就是这样!就像访问任何其他模块一样,输入print(data.testString)将打印到控制台一个字符串文字,用于导入和测试。 然而,如果你想要从mod import *中获得等效的效果,只需删除类、实例赋值和删除exec即可。

希望这对你有所帮助。 石磊

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

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

from y import * 

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

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

这帮助我用Visual Studio Code构建我的Python项目。

当你没有在目录中声明__init__.py时,可能会导致这个问题。目录变成隐式的名称空间包。下面是关于Python导入和项目结构的一个很好的总结。

另外,如果你想使用顶部栏中的Visual Studio Code运行按钮,脚本不在主包中,你可以尝试从实际目录运行控制台。

例如,你想要从测试包中执行一个打开的test_game_item.py,并且你有Visual Studio Code在省略(主包)目录中打开:

├── omission
│   ├── app.py
│   ├── common
│   │   ├── classproperty.py
│   │   ├── constants.py
│   │   ├── game_enums.py
│   │   └── __init__.py
│   ├── game
│   │   ├── content_loader.py
│   │   ├── game_item.py
│   │   ├── game_round.py
│   │   ├── __init__.py
│   │   └── timer.py
│   ├── __init__.py
│   ├── __main__.py
│   ├── resources
│   └── tests
│       ├── __init__.py
│       ├── test_game_item.py
│       ├── test_game_round_settings.py
│       ├── test_scoreboard.py
│       ├── test_settings.py
│       ├── test_test.py
│       └── test_timer.py
├── pylintrc
├── README.md
└── .gitignore

目录结构来自[2]。

你可以试着这样设置:

(Windows) Ctrl + Shift + P→Preferences: Open Settings (JSON)。

将这一行添加到用户设置中:

"python.terminal.executeInFileDir": true

对于其他系统,更全面的答案也在这个问题中。