首先,我对python编码有点陌生,所以这似乎是一个愚蠢的问题。
问题:我正在尝试创建一个脚本,允许我将数字导入(变量?操作符?)名称,以便从bash脚本运行我的python脚本。
理想情况下,我想做以下事情(我知道语法是错误的,但它是从我的第一次尝试和捕获我想要它做什么):
replica_number = 2
#2仅用于测试。之后,将在许多不同的数据表上与bash脚本中导入的数字进行交换。
t_r+replica number = md.load(data_path+'potein_+replica_number+_centered.xtc', top = data_path+'potein_+replica_number+_first.gro')[1:]
我想这样做的是自动创建名为t_r2的变量,并导入名为protein_2_centric的文件。XTC和protein__first_gro。然而,当我这样做时,我得到:SyntaxError:不能分配给操作符
有没有人知道如何解决这个问题,或者我只需要为每个副本制作一个单独的脚本?
你需要的不是一个列表就是一个字典。
您可以将所有结果保存在列表中(不保留replica_number
):
t_r_list = []
t_r_list.append(md.load(...)[1:]) # Run this line for each t_r you want to load
或者如果您想保留replica_number
,您可以使用字典:
t_r_dict = {}
t_r_dict[replica_number] = md.load(...)[1:]
你可能想读一篇关于这些数据结构以及如何使用它们的教程,它将极大地帮助你以后的python之旅,并且是在python中处理数据的基础。
当属性或变量的名称是动态的时,我们可以使用,例如,Python对格式化字符串使用的新方法(f "),然后使用setattr方法:
setattr方法是这样的,是内置库的一部分:
def setattr(x, y, v): # real signature unknown; restored from __doc__
""" Sets the named attribute on the given object to the specified value."""
在这里你可以对变量做什么
replica_number = 2
variable_name = f't_r{replica_number }'
,然后检查并设置属性:
if not hasattr(YOUR_OBJECT, variable_name ):
raise ValueError
setattr(YOUR_OBJECT, variable_name , THE_VALUE)
使用字典进行此类操作:
replica_number = md.load(...)[1:]
your_dict = {t_r : replica_number}
并通过
访问your_dict[t_r]