如何在python中为单个操作编写多个循环
我刚开始学习python,我真的需要完成这项工作,而且我真的不知道如何在一个巨大的信息海洋中寻找答案 我正在使用PDB解析器,我有以下代码:如何在python中为单个操作编写多个循环,python,loops,parsing,Python,Loops,Parsing,我刚开始学习python,我真的需要完成这项工作,而且我真的不知道如何在一个巨大的信息海洋中寻找答案 我正在使用PDB解析器,我有以下代码: #Calling the module from Bio.PDB.PDBParser import PDBParser #Defining some variables parser = PDBParser(PERMISSIVE=1) structure_id= "3caq" filename = "3caq.pdb" #This is the act
#Calling the module
from Bio.PDB.PDBParser import PDBParser
#Defining some variables
parser = PDBParser(PERMISSIVE=1)
structure_id= "3caq"
filename = "3caq.pdb"
#This is the actual task to be done
structure = parser.get_structure(structure_id, filename)
#What I'm interested in doing
compound = structure.header['compound']
print structure_id + " |", compound
因此:
3caq{'1':{'synonym':'delta(4)-3-酮甾体5-β-还原酶,醛酮还原酶家族1成员d1','chain':'a,b','misc':'molecular':'3-oxo-5-β-甾体4-脱氢酶','ec'编号':'1.3.1.3','engineering':'yes'}
问题是,我并不是只处理一个文件(在“filename”下定义),而是有数百个文件需要从中提取“header”,并且只保留所述header的“component”变量
我知道我必须为此编写循环,我尝试了以下方法:
#Defining lists
nicknames = { "3caq", "2zb7" }
structures = { "3caq.pdb", "2bz7.pdb" }
structure_id = []
for structure in structures:
structure_id.append(nickname)
filename = []
for structure in structures:
filename.append(structure)
然后,我向解析器提供数据,但得到一个错误
Traceback (most recent call last):
File "/home/tomas/Escritorio/d.py", line 16, in <module>
header = parser.get_structure(structure_id, filename)
File "/usr/local/lib/python2.7/dist-packages/Bio/PDB/PDBParser.py"
, line 82, in get_structure
self._parse(handle.readlines())
AttributeError: 'list' object has no attribute 'readlines'
回溯(最近一次呼叫最后一次):
文件“/home/tomas/Escritorio/d.py”,第16行,在
header=parser.get\u结构(结构\u id,文件名)
文件“/usr/local/lib/python2.7/dist-packages/Bio/PDB/PDBParser.py”
,第82行,在get_结构中
self.\u解析(handle.readlines())
AttributeError:“list”对象没有属性“readlines”
我很确定这个循环写得不正确
因此,如果我能得到一些关于如何正确编写循环的帮助,我将非常感激,无论是使用我可以检查的资源,还是使用正确的命令
致以最诚挚的问候。清楚的理解将有助于您解决这一问题 您需要迭代许多结构,因此使用for循环是一个很好的选择。我建议您使用列表而不是集合来存储结构和文件名
filenames = ["3caq", "2zb7" ]
structures = ["3caq.pdb", "2bz7.pdb"]
现在,您可以按结构的长度进行迭代
for each in range(len(structures)):
structure = parser.get_structure(structures[each], filenames[each])
compound = structure.header['compound']
print structure_id + " |", compound
让我知道这是否适合你 当
get\u structure()
需要一个字符串(“3caq.pdb”
)时,您正在传递一个列表([“3caq.pdb”]
),因此出现错误
以下是如何支持多个文件:
from Bio.PDB.PDBParser import PDBParser
files = {"3caq.pdb", "2bz7.pdb"}
for filename in files:
# Defining some variables
parser = PDBParser(PERMISSIVE=1)
# Drop ".pdb" from filename to get structure_id
structure_id = filename.split('.')[0]
# This is the actual task to be done
structure = parser.get_structure(structure_id, filename)
# What I'm interested in doing
compound = structure.header['compound']
print("{} | {}".format(structure_id, compound))
为了使您的代码更好,我将把它作为一个单独的函数编写:
from Bio.PDB.PDBParser import PDBParser
def get_compound_header(filename):
# Defining some variables
parser = PDBParser(PERMISSIVE=1)
# Drop ".pdb" from filename to get structure_id
structure_id = filename.split('.')[0]
# This is the actual task to be done
structure = parser.get_structure(structure_id, filename)
# What I'm interested in doing
compound = structure.header['compound']
return "{} | {}".format(structure_id, compound)
# Main function
if __name__ == "__main__":
files = {"3caq.pdb", "2bz7.pdb"}
for filename in files:
print(get_compound_header(filename))
“我有一个错误”-你能发布你收到的完整错误吗?对不起,我忘记了它回溯(上次的最新调用):文件“/home/tomas/Escritorio/d.py”,第16行,在header=parser.get_structure(structure_id,filename)文件“/usr/local/lib/python2.7/dist packages/Bio/PDB/PDBParser.py”,第82行,在get_structure self(handle.readlines())AttributeError:'list'对象没有属性'readlines',请在您的问题中发布它。第一块代码行吗?哦,是的!谢谢:)我会编辑它,任何有索引的东西都会有帮助。您可以用它来将昵称与文件名配对并省去索引。它也行得通!非常感谢你。我不得不编辑最后一个字符串,它的结尾是:打印文件名[每个]+“|”,复合