如果文件路径存储在变量中,是否可以从另一个.py文件导入数据?

问题描述 投票:0回答:2

我正在编写一个程序来帮助我为我的 pygame 项目构建矩阵。 (我使用 tkinter 作为设置窗口,然后使用 pygame 为图块着色,为它们提供 0 到 9 之间的值)

我希望可以用命名文件保存项目,以便稍后重新打开。我所需要的只是存储在 .py 保存文件中的变量值。我在创建这些保存文件时没有遇到任何问题,但是我在加载这些文件时遇到了困难。

目前我正在使用 tkinters“文件对话框”来获取文件地址,然后使用 os 模块从地址中获取文件名并将其分配给变量。

我遇到的问题是从文件导入信息,而文件名可能会有所不同,因此存储在变量中。

任何人都可以为我指明正确的方向,以便在编写代码时无需文件名即可导入吗? TIA

不是我的实际程序,只是将我试图解决的问题的最简单的示例放在一起(File2 仅包含“var = 1”)

second_file = "file2.py"

from second_file import *

print(var)

运行这个显然会给我“ModuleNotFoundError:没有名为‘second_file’的模块” 只是想知道是否有办法重写它,以便它知道它是一个变量?

python variables import
2个回答
0
投票

如果想在Python中使用变量名导入模块,可以使用importlib模块的import_module函数。这允许您使用包含模块名称的字符串(变量)动态导入模块。您可以通过以下方式重写代码来实现此目的:

导入导入库

second_file = "file2" # 请注意,您不需要 '.py' 扩展名

模块 = importlib.import_module(第二个文件) 打印(模块.var)

importlib.import_module(second_file) 导入由 secondary_file 变量的值指定的模块。然后你可以使用 module.var 访问变量 var。

确保 secondary_file 变量包含要导入的模块名称,不带 .py 扩展名。该模块应位于与导入该模块的脚本相同的目录中,或者在 Python 路径中可用。


0
投票

是的,这是可能的。 Python 提供了多种方法来实现此目的,一种常见的方法是使用 importlib 模块 https://docs.python.org/3/library/importlib.html

例如:

## file2.py

example_var = "You're in file2"
## main.py

import importlib.util

# Store the file path in a variable
second_file = 'file2.py'

# Create a module specification from the file path
spec = importlib.util.spec_from_file_location('data', second_file)

# Create a new module based on the specification
data_module = importlib.util.module_from_spec(spec)

# Execute the module (run the code in the .py file)
spec.loader.exec_module(data_module)

# Access the data from the imported module
data = data_module.example_var
print(data)  # Output: You're in file2

祝你好运

只是一个想法:请学习如何创建 python 包,并了解 python 中的类,以创建更清晰的代码。此外,函数式编程在这些情况下也非常有用。可以在不使用 importlib 模块的情况下创建上述代码。

© www.soinside.com 2019 - 2024. All rights reserved.