Python 如何将字符串作为变量名赋值传递
我有一个SDF数据文件,它以块格式存储变量名及其值Python 如何将字符串作为变量名赋值传递,python,variables,dynamic,variable-assignment,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
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
您可以使用
eval
从Python中的字符串计算表达式。下面是一个简单的例子:
>>> x = 123
>>> y = "x"
>>> z = eval(y)
>>>
>>> print z
123
在您的情况下,您可以执行以下操作:
electronDensity = eval(vName)
使用无参数,可以作为字典访问局部变量。或者您也可以使用或
与混合使用属性名称获取任意属性:
vs = vName.split('.')
varname = vs.pop(0)
value = vars()[varname]
for v in vs:
value = getattr(value, v)
electronDensity = value
谢谢你的回答。我做了下面的事情,它成功了。 这样,即使我不知道在每次模拟运行中创建的变量是什么,我的后处理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])
再次感谢。eval()
非常危险!!