Skip to main content
 首页 » 编程设计

python之将文件加载到变量中

2024年08月12日36落叶无声

我正在尝试编写一个获取变量名的小函数,检查它是否存在,如果不存在,则将其从文件(使用 pickle)加载到全局命名空间。

我尝试在文件中使用它:

import cPickle 
 
# 
# Load if neccesary 
# 
def loadfile(variable, filename): 
    if variable not in globals(): 
        cmd = "%s = cPickle.load(file('%s','r'))" % (variable, filename) 
        print cmd 
        exec(cmd) in globals() 

但它不起作用 - 变量未定义。我做错了什么?

请您参考如下方法:

使用'globals' 的问题是它只适用于当前模块。与其传递“globals”,更好的方法是直接在命名空间上使用内置的“setattr”。这意味着您可以在实例和模块上重用该函数。

import cPickle 
 
# 
# Load if neccesary 
# 
def loadfile(variable, filename, namespace=None): 
    if module is None: 
        import __main__ as namespace 
    setattr(namespace, variable, cPickle.load(file(filename,'r'))) 
 
# From the main script just do: 
loadfile('myvar','myfilename') 
 
# To set the variable in module 'mymodule': 
import mymodule 
... 
loadfile('myvar', 'myfilename', mymodule) 

注意模块名称:主脚本始终是模块 ma​​in。如果您正在运行 script.py 并执行“导入脚本”,您将获得一份单独的代码副本,这通常不是您想要的。