Python 3 解决方案。
在我的工作中,令人烦恼的部分是氨基酸代码可以参考PDB / mmCIF文件中经常出现的修改后的代码,例如
'Tih'-->'A'.
所以映射可以超过 22 对。 Python 中的第 3 方工具,如
Bio.SeqUtils.IUPACData.protein_letters_3to1
无法处理。我最简单的解决方案是使用http://www.ebi.ac.uk/pdbe-srv/pdbechem 查找映射并将异常映射添加到我自己的函数中的字典中,每当我遇到它们时。
def three_to_one(three_letter_code):
mapping = {'Aba':'A','Ace':'X','Acr':'X','Ala':'A','Aly':'K','Arg':'R','Asn':'N','Asp':'D','Cas':'C',
'Ccs':'C','Cme':'C','Csd':'C','Cso':'C','Csx':'C','Cys':'C','Dal':'A','Dbb':'T','Dbu':'T',
'Dha':'S','Gln':'Q','Glu':'E','Gly':'G','Glz':'G','His':'H','Hse':'S','Ile':'I','Leu':'L',
'Llp':'K','Lys':'K','Men':'N','Met':'M','Mly':'K','Mse':'M','Nh2':'X','Nle':'L','Ocs':'C',
'Pca':'E','Phe':'F','Pro':'P','Ptr':'Y','Sep':'S','Ser':'S','Thr':'T','Tih':'A','Tpo':'T',
'Trp':'W','Tyr':'Y','Unk':'X','Val':'V','Ycm':'C','Sec':'U','Pyl':'O'} # you can add more
return mapping[three_letter_code[0].upper() + three_letter_code[1:].lower()]
另一种解决方案是在线检索映射(但url和html模式可能会随着时间而改变):
import re
import urllib.request
def three_to_one_online(three_letter_code):
url = "http://www.ebi.ac.uk/pdbe-srv/pdbechem/chemicalCompound/show/" + three_letter_code
with urllib.request.urlopen(url) as response:
single_letter_code = re.search('\s*<td\s*>\s*<h3>One-letter code.*</h3>\s*</td>\s*<td>\s*([A-Z])\s*</td>', response.read().decode('utf-8')).group(1)
return single_letter_code
为了简单起见,这里我直接使用 re 而不是 html 解析器。
希望这些能有所帮助。