Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Parsing - Fatal编程技术网

如何在python中为单个操作编写多个循环

如何在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

我刚开始学习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 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',请在您的问题中发布它。第一块代码行吗?哦,是的!谢谢:)我会编辑它,任何有索引的东西都会有帮助。您可以用它来将昵称与文件名配对并省去索引。它也行得通!非常感谢你。我不得不编辑最后一个字符串,它的结尾是:打印文件名[每个]+“|”,复合