Python中字符串的变量名
我已经用Python编写了一些代码,我想将一些变量保存到具有变量名称的文件中 以下代码:Python中字符串的变量名,python,variables,filenames,Python,Variables,Filenames,我已经用Python编写了一些代码,我想将一些变量保存到具有变量名称的文件中 以下代码: variableName1 = 3.14 variableName2 = 1.09 save_variable_to_file(variableName1) # function to be defined save_variable_to_file(variableName1) 应创建两个文件,一个名为variableName1.txt,另一个名为variableName2.txt,每个文件应包含调用函
variableName1 = 3.14
variableName2 = 1.09
save_variable_to_file(variableName1) # function to be defined
save_variable_to_file(variableName1)
应创建两个文件,一个名为variableName1.txt,另一个名为variableName2.txt,每个文件应包含调用函数时相应变量的值
这个变量名在代码中应该是唯一的
谢谢
嗯不,这样不行。在此处写入变量名时,它会将变量的值,
3.14
等提供给将变量保存到文件()
。请尝试以下变体之一:
d = dict(my_variable_name=3.14)
save_variable_to_file('my_variable_name', d['my_variable_name'])
或:
如果你真的想学习Python的话,这里有一个例子,你一定要看清楚。不幸的是,不可能找到变量的名称。要么扩展函数以允许字符串作为参数,要么必须使用其他解决方案:
save_variable_to_file("variableName1", variableName1)
另一种解决方案是将变量存储在dict
中,该dict允许检索键
:
myVariables = {}
myVariables["variableName1"] = 3.14
for key, value in myVariables.items():
save_variable_to_file(key, value)
使用dict如何:
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)
只要考虑到所有局部定义的变量,就应该做到这一点
然而,一个更好的解决办法是把你所需要的一切都写进一份口述,并像其他人已经提出的那样行动
你甚至可以这样做:
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')
变量没有名称。当脚本运行时,它会为它与通常称为变量的对象交互的一些对象创建一个或多个标识符,但这些标识符是临时的,在程序结束时不再存在。即使保存它们,您也将面临相反的问题,即如何将它们转换回具有与保存的值关联的保存名称的标识符 可以找到变量的名称,被调用函数可以使用以下方法获取调用方的变量:
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之类的东西。如果希望将变量的名称作为字符串,请使用python varname包(python3):
输出:
s
在此处获取软件包:
那么,问题是什么??您应该阅读用于读取和写入文件的..file1=open(Name,'w'),其中Name是字符串,然后是file1.write1(var1)。最后你关闭文件1.close()你尝试了什么不起作用的?如果你的问题解决了,请不要忘记接受任何答案。如果只给文件提供了内容,那么应该如何将变量保存到文件()
知道文件名?它们的作用完全相同;它们传递的是值,而不是名称<代码>将变量保存到文件
需要2条信息;一个名称和一个值(或一个查找名称以获取值的位置)。感谢这两种解决方案:要么将名称作为字符串和变量传递,要么创建一个字典,然后从中读取名称。我认为这两种方式都应该很好。再次感谢。遍历所有局部变量()将是一个巨大的混乱,您至少应该确保只考虑不以\uuu
开头的键。我有数百个变量,此操作将每秒执行500次,持续几分钟。这种方法不会导致大量for循环开销,从而降低程序的速度吗?@Michael这是第一种方法,在这种情况下需要进行一些优化——正如我所写,“只要考虑/所有/局部定义的变量”。如果不是这样,则必须修改代码,例如按照您建议的方式。@user1713952这听起来需要做很多工作-您认为您有什么选择?@user1713952:如果您有数百个变量,并且您自己的命名空间中没有这些变量,您可以将它们作为键值对进行迭代,你的程序肯定做错了什么。无论如何,关于这个问题的更多细节,你会得到更好的答案。
import glob
for fname in glob.iglob("*.txt"):
vname = fname.rstrip(".txt")
value = open(fname).read()
exec(vname + "=" + value)
print(locals())
from varname import nameof
s = 'Hey!'
print (nameof(s))
s