簡體   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