如何從 PDB 文件中提取氨基酸序列 |(自學生信Python第十二天)

如何從 PDB 文件中提取氨基酸序列

蛋白質(zhì)數(shù)據(jù)庫Protein Data Bank(PDB)是一個包含蛋白質(zhì)、核酸等生物大分子的結(jié)構(gòu)數(shù)據(jù)的數(shù)據(jù)庫,網(wǎng)址是http://www.rcsb.org。PDB可以經(jīng)由網(wǎng)絡(luò)免費訪問,是結(jié)構(gòu)生物學研究中的重要資源。為了確保PDB資料的完備與權(quán)威,各個主要的科學雜志、基金組織會要求科學家將自己的研究成果提交給PDB。PDB數(shù)據(jù)庫存儲結(jié)構(gòu)數(shù)據(jù)的文件是PDB文件,每一個蛋白質(zhì)或核酸都對應(yīng)著一個編號,即PDBID, 文件的擴展名為.pdb。PDB文件可以由各種3D結(jié)構(gòu)顯示軟件打開,比如pymol,Swiss-PDB viewer,VMD等。PDB文件里面的信息是有嚴格的格式的。各行數(shù)據(jù),如標識,原子名,原子序號,殘基名稱,殘基序號等,不僅要按照嚴格的順序書寫,而且各項所占的空符串長度,及其所處的各行的位置都是嚴格規(guī)定。更多信息請查看PDB文件中信息的格式。

寫在前面的話:
本人是一枚生物學的學生,由于對生物信息學特別感興趣,于是想自學生物信息學(新手莫怪)
。了解到生物信息學要有編程基礎(chǔ),尤其是要會一門編程語言,例如:R語言、Python、Perl等,還要熟悉Linux系統(tǒng),作為生信小白,聽說Python挺簡單的,于是就自學了Python,花了兩天時間了解了Python的基礎(chǔ)語法后,今天想做個練習題試試手(實踐是檢驗真理的唯一標準)。

氨基酸殘基與核酸縮寫

眾所周知氨基酸標準縮寫是三個字母,而這次我們所用的PDB文件里面也是用三個字母表示的氨基酸,我們需要把它轉(zhuǎn)化為常見的fasta格式的氨基酸序列,所以我們首先應(yīng)該用字典將三個字母的氨基酸轉(zhuǎn)換為單字母代碼。
字典的鍵是氨基酸三字母代碼, 值是對應(yīng)的氨基酸的單字母代碼。使程序用該字典從 PDB 文件的 SEQRES 行讀取殘基名稱 (以三字母代碼的形式) (文件 1TDL 中) , 然后將它們轉(zhuǎn)換為一個字母代碼,連接這些字母,就得到了蛋白質(zhì)序列。最后,將該序列以 FASTA 的格式打印出來。
1TLD. pdb文件如圖所示:


1TLD. pdb開頭
SEQRES 行

要使用該程序,需要找到 PDB文檔 ,下載并保存 PDB文件。 此例使用了 PDB文件 1TLD. pdb,其中有牛自膜蛋白酶在1. 5A分辨率下的晶體結(jié)構(gòu),該 PDB文件 的 SEQ阻S行列出了實驗用到的蛋白質(zhì)序列。每個 SEQRES行可分為 17 列。 第一列包含關(guān)鍵 字"SEQRES"; 第二列有序列的行號(從 1 開始) ;第三列是鏈 ID; 第四列是組成序列的殘基數(shù); 從第五列到最后一列是(三字母代碼形式的)殘基。列之間由一個空格進行分隔。
第一步:定義字典

aa_codes = {
    'ALA':'A','CYS':'C','ASP':'D','GLU':'E',
    'PHE':'F','GLY':'G','HIS':'H','LYS':'K',
    'ILE':'I','LEU':'L','MET':'M','ASN':'N',
    'PRO':'P','GLN':'Q','ARG':'R','SER':'S',
    'THR':'T','VAL':'V','TYR':'Y','TRP':'W'}

第二步:讀取文件
首先讀取文件,以"SEQRES"定位到位置,并.split()去掉空格

seq = ''
for line in open("C:/Desktop/1tld.pdb"):
    if line[0:6] =="SEQRES":
        columns = line.split()
        for resname in columns[4:]:
            seq = seq + aa_codes[resname]

第三步:打印輸出*

i = 0
print(">1TLD")
while i < len(seq) :
    print(seq[i:i+64])
    i =i+64

最后附上完整代碼:

aa_codes = {
    'ALA':'A','CYS':'C','ASP':'D','GLU':'E',
    'PHE':'F','GLY':'G','HIS':'H','LYS':'K',
    'ILE':'I','LEU':'L','MET':'M','ASN':'N',
    'PRO':'P','GLN':'Q','ARG':'R','SER':'S',
    'THR':'T','VAL':'V','TYR':'Y','TRP':'W'
}
seq = ''
for line in open("C:/Desktop/1tld.pdb"):
    if line[0:6] =="SEQRES":
        columns = line.split()
        for resname in columns[4:]:
            seq = seq + aa_codes[resname]
i = 0
print(">1TLD")
while i < len(seq) :
    print(seq[i:i+64])
    i =i+64

日常結(jié)尾:
雖然這是個小小的計算程序,但對于初學者的我來說每一次對原代碼的升級改造,哪怕是讀懂后的注釋都感覺是一次進步提升,總之代碼雖小,動手最重要!希望更多學習Python的愛好者不要像我一樣眼高手低,學習編程就是要,思考,敲碼,思考,敲碼,敲碼,再敲碼!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容