5

我已经用 Python 编写了一些代码,我想将一些变量保存到具有变量名称的文件中。

以下代码:

variableName1 = 3.14
variableName2 = 1.09
save_variable_to_file(variableName1) # function to be defined
save_variable_to_file(variableName1)

应该创建 2 个文件,一个名为 variableName1.txt,另一个名为 variableName2.txt,每个文件都应包含调用函数时相应变量的值。

这个变量名在代码中应该是唯一的。

谢谢!

HM

4

7 回答 7

1

不,这行不通。当你在那里写变量名时,它会给出变量的值,3.14依此类推,到save_variable_to_file(). 尝试以下变体之一:

d = dict(my_variable_name=3.14)
save_variable_to_file('my_variable_name', d['my_variable_name'])

或者:

var_name = 'my_variable_name'
d = {var_name: 3.14}
save_variable_to_file(var_name, d[var_name])

这是一个很好的教程,如果你认真学习 Python,你绝对应该阅读它。

于 2012-10-02T09:48:55.897 回答
1

可以找到变量的名称,被调用函数可以使用以下方法获取其调用者的变量:

import sys

def save_variable_to_file(var):

     names = sys._getframe(1).f_globals
     names.update(sys._getframe(1).f_locals)
     for key in names.keys():
         if names[key] == var: 
             break

     if key:
         open(key+".txt","w").write(str(var))
     else:
         print(key,"not found")

thing = 42
save_variable_to_file(thing)

但这可能是一个非常糟糕的主意。请注意,我已将值转换为字符串,您希望如何保存字典和列表?稍后您将如何重建变量?

import glob

for fname in glob.iglob("*.txt"):
    vname = fname.rstrip(".txt")
    value = open(fname).read()
    exec(vname + "=" + value)

print(locals())

使用类似的东西exec可能会带来安全风险,使用 pickle、JSON 或 YAML 之类的东西可能会更好。

于 2012-10-02T10:20:36.690 回答
0

不幸的是,不可能找出变量的名称。要么扩展你的函数以允许字符串作为参数,要么你必须使用另一种解决方案:

save_variable_to_file("variableName1", variableName1)

另一种解决方案是将变量存储在dict允许检索的 a 中keys

myVariables = {}
myVariables["variableName1"] = 3.14


for key, value in myVariables.items():
    save_variable_to_file(key, value)
于 2012-10-02T09:49:16.557 回答
0

变量没有名称。当您的脚本运行时,它会为一些与通常称为变量交互的对象创建一个或多个标识符,但这些都是临时的,并且在程序结束时不再存在。即使您保存它们,您也会面临相反的问题,即如何将它们转回具有与保存值相关联的保存名称的标识符。

于 2012-10-02T10:05:49.753 回答
0

如何使用字典:

var_dict = {'variable1': 3.14, 'variable2':1.09}
for key, value in var_dict.items():
    with open('path\%s'%key, "w") as file:
        file.write(value)
于 2012-10-02T09:51:22.400 回答
0
for key, value in locals().items():
    with open(key + '.txt', 'w') as f:
        f.write(value)

应该做你的伎俩 - 只要要考虑所有本地定义的变量。

然而,一个更好的解决方案是将你需要的所有东西放入一个字典中,并按照其他人已经提出的那样行事。

你甚至可以这样做:

def save_files(**files):
    for key, value in files.items():
        with open(key + '.txt', 'w') as f:
            f.write(value)

接着

save_files(**my_previously_defined_dict)
save_files(**locals()) # as example above
save_files(filename='content')
于 2012-10-02T09:54:17.613 回答
0

如果要将变量的名称作为字符串获取,请使用 python-varname 包(python3):

from varname import nameof

s = 'Hey!'

print (nameof(s))

输出:

s

在这里获取包:

https://github.com/pwwang/python-varname

于 2021-01-17T01:43:15.057 回答