Skip to content Skip to sidebar Skip to footer

Variable Name To String In Python

I have written some code in Python and I would like to save some of the variables into files having the name of the variable. The following code: variableName1 = 3.14 variableName

Solution 1:

No, this won't work. When you write the variable name there, it gives the value of the variable, 3.14 and so on, to save_variable_to_file(). Try one of these variants:

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

or:

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

Here is a good tutorial, that you should definitely go through, if you're serious about learning Python.

Solution 2:

It is possible to find the name of a variable, a called function can get its caller's variables using:

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 = 42save_variable_to_file(thing)

But it is probably a really bad idea. Note that I have converted the value to a string, how would you want dictionaries and lists to be saved? How are you going to reconstruct the variable later?

import glob

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

print(locals())

Using something like exec can be a security risk, it is probably better to use something like a pickle, JSON, or YAML.

Solution 3:

Unfortunately it is not possible to find out the name of a variable. Either you extend your function to also allow a string as a parameter, or you have to use another solution:

save_variable_to_file("variableName1", variableName1)

Another solution would be to store your variables within a dict which allows the retrieval of the keys as well:

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


for key, value in myVariables.items():
    save_variable_to_file(key, value)

Solution 4:

How about using a dict:

var_dict = {'variable1': 3.14, 'variable2':1.09}
for key, value in var_dict.items():
    withopen('path\%s'%key, "w") as file:
        file.write(value)

Solution 5:

for key, valueinlocals().items():
    withopen(key + '.txt', 'w') as f:
        f.write(value)

should do your trick - as long as all locally defined variables are to be considered.

A far better solution, however, would be to put all you need into a dict and act as the others already proposed.

You could even do this:

defsave_files(**files):
    for key, value in files.items():
        withopen(key + '.txt', 'w') as f:
            f.write(value)

and then

save_files(**my_previously_defined_dict)
save_files(**locals()) # as example above
save_files(filename='content')

Post a Comment for "Variable Name To String In Python"