Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字符串作为变量名赋值传递_Python_Variables_Dynamic_Variable Assignment - Fatal编程技术网

Python 如何将字符串作为变量名赋值传递

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

我有一个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

您可以使用
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()
非常危险!!