[英]Python - how to match specific words / digits from multiple lines in a text file and store them in separate lists
[英]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 , EVIDENCE_CODE和SITE_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.