You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过变量存储的路径动态导入Python文件中的变量?

如何通过变量中的文件名导入Python模块?

我正在开发一个辅助Pygame项目构建矩阵的工具——用Tkinter做设置窗口,通过Pygame给tiles上色来赋予0-9的数值。我需要把项目保存为自定义命名的文件,之后能重新打开读取其中的变量值。创建保存文件没问题,但加载时遇到了麻烦:

  • 我用Tkinter文件对话框获取文件路径,再通过os模块提取文件名存到变量里
  • 但当文件名是变量时,没法导入文件里的内容

简化示例(file2.py仅包含var = 1):

second_file = "file2.py"

from second_file import *

print(var)

运行报错:ModuleNotFoundError: No module named 'second_file'

想问有没有办法修改代码,让Python识别变量里的文件名?


解决方案

方法1:使用importlib动态导入

这是Python官方推荐的动态导入方式,能完美处理文件名存于变量的场景:

import importlib.util
import os

second_file = "file2.py"
# 提取模块名(去掉.py后缀)和绝对路径
module_name = os.path.splitext(os.path.basename(second_file))[0]
file_path = os.path.abspath(second_file)

# 加载并执行模块
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

# 直接通过模块对象访问变量
print(module.var)

方法2:直接读取文件并执行(适合简单场景)

如果你的保存文件只是纯变量赋值的简单内容,可以直接读取文件代码并执行,将变量加载到当前命名空间:

second_file = "file2.py"

# 读取文件内容
with open(second_file, 'r', encoding='utf-8') as f:
    code_content = f.read()
# 执行代码,变量会被注入当前环境
exec(code_content)

print(var)

注意:此方式仅适用于你自己生成的信任文件,绝对不要用来执行未知来源的代码,存在安全风险。

额外优化建议

用.py文件存储配置并非最优选择,推荐使用更适合存储数据的格式:

  • JSON:适合结构化数据,读写简单,完全避免模块导入问题
  • Pickle:可直接序列化Python对象,但仅适用于信任文件
  • ConfigParser:适合键值对形式的配置文件

以JSON为例的示例代码:
保存时:

import json

# 存储矩阵和变量数据
project_data = {"var": 1, "matrix": [[0,1],[2,3]]}
with open("matrix_config.json", 'w', encoding='utf-8') as f:
    json.dump(project_data, f, indent=2)

加载时:

import json

with open("matrix_config.json", 'r', encoding='utf-8') as f:
    project_data = json.load(f)
print(project_data["var"])
print(project_data["matrix"])

内容的提问来源于stack exchange,提问作者Jordan Beauchamp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:34:57