如何将字符串作为变量名称赋值

时间:2015-12-16 04:55:12

标签: python variables dynamic variable-assignment

我有一个SDF数据文件,它以块格式存储变量名称及其值。

varNameList旁边的值是变量(字符串)的名称,对应于sdf文件中的数据块,只能通过给出这些变量名来访问它。

我使用ipython中的以下代码读取数据文件和变量

import sdf
import numpy as np
dataFile = sdf.read('0010.sdf')

varNameList = dir(dataFile)  
varSize = np.size(varNameList)  #gives the array size
vName = 'dataFile.'+np.str(varNameList[51])+'.data'

变量名称的输出如下:

In [71]:varNameList[51]
Derived_Number_Density_electron

In [72]:vName
'dataFile.Derived_Number_Density_electron.data'

现在,我希望在作业的右侧使用此字符串,例如

electronDensity = dataFile.Derived_Number_Density_electron.data

如果我在标准Python程序中编写此行,它会读取数据并将其分配给electronDensity。

但是,在我的模拟中,这些变量是动态创建的,并且可以使用上面所写的dir()命令找到它们的名称。我无法创建相当于

的程序行
electronDensity = dataFile.Derived_Number_Density_electron.data

3 个答案:

答案 0 :(得分:1)

您可以使用eval来评估Python中字符串的表达式。这是一个简单的例子:

>>> x = 123
>>> y = "x"
>>> z = eval(y)
>>> 
>>> print z
123

在您的情况下,您可以这样做:

electronDensity = eval(vName)

答案 1 :(得分:0)

使用不带参数的https://fortawesome.github.io/Font-Awesome/examples/,可以将本地变量作为字典访问。或者您也可以使用varsglobals

使用locals混合以使用属性名称获取任意属性:

vs = vName.split('.')
varname = vs.pop(0)
value = vars()[varname]
for v in vs:
   value = getattr(value, v)

electronDensity = value

答案 2 :(得分:0)

感谢您的回答。我做了以下工作。 这样,即使我不知道在每次模拟运行中创建的vaiables是什么,我的后处理python脚本将在模拟运行时处理动态创建的变量。

path = '/home/ajit/run/data/0001.sdf'
datafile=sdf.read(path)
varNameList = dir(datafile)   #reads all the variable names
varNameSize = np.size(varNameList)
varName=[0 for i in range(varNameSize]
varData=[0 for i in range(varNameSize]

for i in range (0, varNameSize):
      varName[i] = 'q.'+np.str(varNameList[i])+'.data'
      varData[i] = eval(varName[i])        

再次感谢。