BioPython-1

文件解析

  1. 針對簡單地fasta文件的解析: ls_orchid.fasta
    我們知道fasta文件的一般是以>開頭,爲一個read,也就是序列的名稱,下面是序列,如這樣的:
>gi|2765658|emb|Z78533.1|CIZ78533 C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA
CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGGAATAAACGATCGAGTG
AATCCGGAGGACCGGTGTACTCAGCTCACCGGGGGCATTGCTCCCGTGGTGACCCTGATTTGTTGTTGGG
...

這種文件其實我們用簡單地文本處理也是可以解決的,但是Bio庫中爲我們提供了更爲簡單地解決方法。

from Bio import SeqIO
for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"):  # 關於文件格式 [參考這裏](https://biopython.org/wiki/SeqIO)
    print(seq_record.id)  # 提取所有的標題 以 > 開頭的
    print(seq_record.seq) # 提取出所有的seq,也就是鹼基序列
    print(seq_record) # 提取出所有的read
    print(len(seq_record)) # 這個是序列長,不包括標題,只是鹼基多少個nc

# 我們解析GBK文件也是同理
for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank"):

# 上面介紹的都是讀取多條數據,下面是讀取單條數據
SeqIO.read("filename","fasta")  # 針對只有一個read 的fasta文件

遍歷序列文件

SeqIO變身迭代器對象:

record_iterator = SeqIO.parse("ls_orchid.fasta", "fasta")

first_record = record_iterator.next()
print first_record.id
print first_record.description

second_record = record_iterator.next()
print second_record.id
print second_record.description

序列文件作爲字典-在內存中

from Bio import SeqIO
orchid_dict = SeqIO.to_dict(SeqIO.parse("ls_orchid.fasta", "fasta"))
print orchid_dict.keys()

寫入序列文件

Bio.SeqIO.write() 的寫入:

from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.Alphabet import generic_protein

rec1 = SeqRecord(Seq("MMYQQGCFAGGTVLRLAKDLAENNRGARVLVVCSEITAVTFRGPSETHLDSMVGQALFGD" \
                    +"GAGAVIVGSDPDLSVERPLYELVWTGATLLPDSEGAIDGHLREVGLTFHLLKDVPGLISK" \
                    +"NIEKSLKEAFTPLGISDWNSTFWIAHPGGPAILDQVEAKLGLKEEKMRATREVLSEYGNM" \
                    +"SSAC", generic_protein),
                 id="gi|14150838|gb|AAK54648.1|AF376133_1",
                 description="chalcone synthase [Cucumis sativus]")

rec2 = SeqRecord(Seq("YPDYYFRITNREHKAELKEKFQRMCDKSMIKKRYMYLTEEILKENPSMCEYMAPSLDARQ" \
                    +"DMVVVEIPKLGKEAAVKAIKEWGQ", generic_protein),
                 id="gi|13919613|gb|AAK33142.1|",
                 description="chalcone synthase [Fragaria vesca subsp. bracteata]")

rec3 = SeqRecord(Seq("MVTVEEFRRAQCAEGPATVMAIGTATPSNCVDQSTYPDYYFRITNSEHKVELKEKFKRMC" \
                    +"EKSMIKKRYMHLTEEILKENPNICAYMAPSLDARQDIVVVEVPKLGKEAAQKAIKEWGQP" \
                    +"KSKITHLVFCTTSGVDMPGCDYQLTKLLGLRPSVKRFMMYQQGCFAGGTVLRMAKDLAEN" \
                    +"NKGARVLVVCSEITAVTFRGPNDTHLDSLVGQALFGDGAAAVIIGSDPIPEVERPLFELV" \
                    +"SAAQTLLPDSEGAIDGHLREVGLTFHLLKDVPGLISKNIEKSLVEAFQPLGISDWNSLFW" \
                    +"IAHPGGPAILDQVELKLGLKQEKLKATRKVLSNYGNMSSACVLFILDEMRKASAKEGLGT" \
                    +"TGEGLEWGVLFGFGPGLTVETVVLHSVAT", generic_protein),
                 id="gi|13925890|gb|AAK49457.1|",
                 description="chalcone synthase [Nicotiana tabacum]")

my_records = [rec1, rec2, rec3]
from Bio import SeqIO
SeqIO.write(my_records, "my_example.faa", "fasta")

下面我們學習IUPAC,這是一個可以讓我們明確你傳入的是DNA,RNA,還是氨基酸序列的鹼基串,它提供檢查的作用:

from Bio.Alphabet import IUPAC
my_seq = Seq("AGTACACTGGT", IUPAC.unambiguous_dna) # 明確是DNA序列
my_seq.alphabet  # IUPACUnambiguousDNA()
from Bio.SeqUtils import GC   # 可以計算GC量,實際上沒有必要,我們自己隨便寫一個函數就能解決

count = SeqIO.convert("ls_orchid.gbk", "genbank", "my_example.fasta", "fasta")  # 文件格式轉換
# ls_orchid.gbk 爲已知的genbank文件,轉化爲my_example.fasta

得到序列的反向互補、互補核苷酸序列:

my_seq = Seq("GATCGATGGGCCTATATAGGATCGAAAATCGC", IUPAC.unambiguous_dna)
my_seq.complement()   # 互補序列
my_seq.reverse_complement()  # 反向互補序列,這個其實可以用切片的方法進行反向

下一步是轉錄:

coding_dna = Seq("ATGGCCATTGTAATGGGCCGCTGAAAGGGTGCCCGATAG", IUPAC.unambiguous_dna)  # 這是原始的DNA,現在求信使RNA
template_dna = coding_dna.reverse_complement()  # 得到模板RNA
messenger_rna = coding_dna.transcribe()  # 轉錄
messenger_rna.translate(to_stop=True)  
# 翻譯 加了to_stop參數表示終止密碼子不翻譯 如果表示用的非標準的起始密碼子 需要加 cds=True

當你想要改變Seq時;事實上,seq相當於一個元組一樣,不能直接改變會報錯的,但是可以通過下面的方法:

my_seq = Seq("GCCATTGTAATGGGCCGCTGAAAGGGTGCCCGA", IUPAC.unambiguous_dna)
mutable_seq = my_seq.tomutable()  # 轉化爲可變的
mutable_seq[5] = "C"
new_seq = mutable_seq.toseq()   # 恢復爲不可變的
	

SeqRecord

這是非常重要的知識點,在處理複雜的鹼基序列中用得着:

新建 SeqRecord:

simple_seq = Seq("GATC")
from Bio.SeqRecord import SeqRecord
simple_seq_r = SeqRecord(simple_seq)

還可以通過初始化函數給 id, name和description賦值;反之,它們被設爲默認值“unknown”(可隨後編輯):

simple_seq_r.id = "AC12345"
simple_seq_r.description = "Made up sequence I wish I could write a paper about"

# 可隨SeqRecord同時建立:
SeqRecord(simple_seq, id="AC12345")

用切片從父序列截取5:18,然後取反向互補序列

from Bio.SeqFeature import SeqFeature, FeatureLocation
example_parent = Seq("ACCGAGACGGCAAAGGCTAGCATAGGTATGAGACTTCCTTCCTGCCAGTGCTGAGGAACTGGGAGCCTAC")
example_feature = SeqFeature(FeatureLocation(5, 18), type="gene", strand=-1)
feature_seq = example_feature.extract(example_parent)

SeqRecord 類中的 format() 能將字符串轉換成被 Bio.SeqIO 支持的格式,如FASTA:

from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.Alphabet import generic_protein

record = SeqRecord(Seq("MMYQQGCFAGGTVLRLAKDLAENNRGARVLVVCSEITAVTFRGPSETHLDSMVGQALFGD" \
                      +"GAGAVIVGSDPDLSVERPLYELVWTGATLLPDSEGAIDGHLREVGLTFHLLKDVPGLISK" \
                      +"NIEKSLKEAFTPLGISDWNSTFWIAHPGGPAILDQVEAKLGLKEEKMRATREVLSEYGNM" \
                      +"SSAC", generic_protein),
                   id="gi|14150838|gb|AAK54648.1|AF376133_1",
                   description="chalcone synthase [Cucumis sativus]")

print record.format("fasta")

多序列比對

Bio.AlignIO.read()只能讀取一個多序列比對而Bio.AlignIO.parse()可以依次讀取多個序列比對數據 :

from Bio import AlignIO
alignment = AlignIO.read("PF05371_seed.sth", "stockholm")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章