Решения Python 3.
В моей работе раздражает то, что коды аминокислот могут относиться к модифицированным кодам, которые часто появляются в файлах PDB/mmCIF, например
«Тих» -> «А».
Таким образом, отображение может быть более 22 пар. Сторонние инструменты в Python, такие как
Bio.SeqUtils.IUPACData.protein_letters_3to1
не могу справиться с этим. Мое самое простое решение — использовать http://www.ebi.ac.uk/pdbe-srv/pdbechem, чтобы найти сопоставление и добавить необычное сопоставление в dict в моих собственных функциях всякий раз, когда я с ними сталкиваюсь.
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 для простоты.
Надеюсь, это может помочь.
person
Young
schedule
07.05.2018
ARGHISLEULEULYS
преобразуется вRHLLK
? Какова логика? - person   schedule 06.10.2012