繁体   English   中英

如何使用Python从输入文本(PDB文件)的多行中收集和收集单词?

[英]How to collect and gather words from multiple lines in a input text (PDB file) using Python?

我正在编写一个Python脚本,该脚本收集文本文件(PDB文件)中的单词,然后以短语形式收集它们。 但是,由于我只是编程的初学者,因此在执行该程序时遇到了很大的困难。 我知道怎么做,每次只需一行。 我希望你们能给我一些帮助。 请。

文本包含有关蛋白质位点的信息。 每个站点都有四个专用的信息 ,如下所示:

REMARK 800  
REMARK 800 SITE_IDENTIFIER: CC1                                                 
REMARK 800 EVIDENCE_CODE: SOFTWARE                                              
REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE EDO A 326                 
REMARK 800                                                                      
REMARK 800 SITE_IDENTIFIER: DF8                                                 
REMARK 800 EVIDENCE_CODE: AUTHOR                                             
REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE HEM T 238
REMARK 800                                                                      
REMARK 800 SITE_IDENTIFIER: FC7                                                 
REMARK 800 EVIDENCE_CODE: SOFTWARE                                              
REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE NAG D 1001 

#and so on ...

在下面的链接(搜索“ REMARK 800”)中可以看到一个扩展的示例: http : //www.pdb.org/pdb/files/3HDL.pdb

观察到

  • 第一行没有任何内容。 (它只是将一个信息与下一个信息分开)
  • 第二个具有SITE_IDENTIFIER (例如CC1)
  • 第三个EVIDENCE_CODE (例如软件)
  • 第四 ,一些残渣信息。 (例如EDO A 326)

在本书的大部分内容中都可以看到这种模式。

我要做的是从四个连续的专用行中的三个中收集一些单词,以一种方式将它们组合在一起。 必要的信息是SITE_IDENTIFIEREVIDENCE_CODESITE_DESCRIPTION中的 3个单词 因此,关于上面的文本摘录,生成的短语将如下所示:

CC1 SOFTWARE EDO A 326
DF8 AUTHOR HEM T 238
FC7 SOFTWARE NAG D 1001

#and so on...

有可能吗? 如果是这样,你们能想象我该怎么做吗?

我尝试过以这种方式进行操作,但是我感觉它根本无法工作:

name_file = "3HDL.pdb"

pdb_file = open(name_file,"r")

for line in pdb_file:
    list = line.split()

    list_2=[]
    for j in range(0, 15):
        list_2.append("")

    if (list[0] == "REMARK" and list[1] == "800"):
        j=0
        while not j == len(list):
            list_2[j] = list[j]
            j+=1

        n=1
        if(list_2[0] == "REMARK" and list_2[1] == "800" and list_2[2] == "SITE_IDENTIFIER:"):
            n+=1
            print("Site", str(n) + ":", list_2[3])
            print("ok" + "\n")

如您所见,我真的是一个初学者。

抱歉任何语法问题,非常感谢。

这样的事情怎么样:

import re

f = open("3HDL.pdb", "r")

for line in f:
  m = re.search(r"REMARK 800 SITE_IDENTIFIER: (.+)", line)
  if m:
    site_id = m.group(1).strip()
  else:
    m = re.search(r"REMARK 800 EVIDENCE_CODE: (.+)", line)
    if m:
      evidence_code = m.group(1).strip()
    else:
      m = re.search(r"REMARK 800 SITE_DESCRIPTION: (.+)", line)
      if m:
        site_descrip = m.group(1).strip()
        print site_id, evidence_code, site_descrip

f.close()

或者,如果您想避免使用正则表达式模块:

f = open("3HDL.pdb", "r")

for line in f:
  if line.startswith("REMARK 800"):
    if line.startswith("SITE_IDENTIFIER:", 11):
      site_id = line[28:].rstrip()
    elif line.startswith("EVIDENCE_CODE:", 11):
      evidence_code = line[26:].rstrip()
    elif line.startswith("SITE_DESCRIPTION:", 11):
      site_descrip = line[29:].rstrip()
      print site_id, evidence_code, site_descrip

f.close()

这里我们假设所需的内容是第2,3行的最后一个单词和第4行的最后3个单词。

name_file = "3HDL.pdb"
pdb_file = open(name_file,"r")
output = []
for linenum, line in enumerate(pdb_file):
    if linenum % 4 ==0:
        continue
    elif linenum % 4 == 1:
        output.append(line.split()[-1])
    elif linenum % 4 == 2:
        output.append(line.split()[-1])
    elif linenum % 4 == 3:
        output.extend(line.split()[-3:])
for i in range(len(output)/6):
    print ' '.join(output[i:i+6])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM