Bio.AlignIO 套件

子模組

模組內容

多序列比對輸入/輸出為比對物件。

Bio.AlignIO 介面刻意與 Bio.SeqIO 非常相似,實際上兩者在內部是相連的。兩個模組都使用同一組檔案格式名稱(小寫字串)。從使用者的角度來看,您可以使用 Bio.AlignIO 讀取包含一個或多個比對的 PHYLIP 檔案,也可以使用 Bio.SeqIO 讀取這些比對中的序列。

Bio.AlignIO 的文件也位於 https://biopython.dev.org.tw/wiki/AlignIO,並且在我們的教學中有完整的一章介紹

輸入

對於您的檔案或處理常式只包含一個比對的典型特殊情況,請使用 Bio.AlignIO.read() 函式。這需要一個輸入檔案處理常式(或在較新版本的 Biopython 中為字串形式的檔名)、格式字串和每個比對的選擇性序列數量。它將傳回單一的 MultipleSeqAlignment 物件(如果只有一個比對,則會引發例外)

>>> from Bio import AlignIO
>>> align = AlignIO.read("Phylip/interlaced.phy", "phylip")
>>> print(align)
Alignment with 3 rows and 384 columns
-----MKVILLFVLAVFTVFVSS---------------RGIPPE...I-- CYS1_DICDI
MAHARVLLLALAVLATAAVAVASSSSFADSNPIRPVTDRAASTL...VAA ALEU_HORVU
------MWATLPLLCAGAWLLGV--------PVCGAAELSVNSL...PLV CATH_HUMAN

對於一般情況,當處理常式可能包含任何數量的比對時,請使用 Bio.AlignIO.parse(…) 函式,該函式採用相同的參數,但傳回一個產生 MultipleSeqAlignment 物件的迭代器(通常在 for 迴圈中使用)。如果您想要依編號隨機存取比對,請將其轉換為清單

>>> from Bio import AlignIO
>>> alignments = list(AlignIO.parse("Emboss/needle.txt", "emboss"))
>>> print(alignments[2])
Alignment with 2 rows and 120 columns
-KILIVDDQYGIRILLNEVFNKEGYQTFQAANGLQALDIVTKER...--- ref_rec
LHIVVVDDDPGTCVYIESVFAELGHTCKSFVRPEAAEEYILTHP...HKE gi|94967506|receiver

大多數比對檔案格式都可以串連,以便盡可能保存許多不同的多序列比對。一個常見的範例是 PHYLIP 套件中工具 seqboot 的輸出。有時可能會出現檔案標頭和頁尾,如 EMBOSS 比對輸出中所示。

輸出

使用 Bio.AlignIO.write(…) 函式,該函式會接收完整的一組比對物件(以清單或迭代器的形式)、輸出檔案處理常式(或較新版本 Biopython 中的檔名),當然還有檔案格式

from Bio import AlignIO
alignments = ...
count = SeqIO.write(alignments, "example.faa", "fasta")

如果使用處理常式,請務必關閉它以將資料刷新到磁碟

from Bio import AlignIO
alignments = ...
with open("example.faa", "w") as handle:
    count = SeqIO.write(alignments, handle, "fasta")

一般而言,您應該呼叫此函式一次(使用所有比對),然後關閉檔案處理常式。但是,對於像 PHYLIP 這樣以循序方式儲存多個比對(沒有檔案標頭和頁尾)的檔案格式,當使用處理常式時,多次呼叫 write 函式應該可以如預期般運作。

如果您使用的是檔名,則重複呼叫 write 函式會每次覆寫現有的檔案。

轉換

Bio.AlignIO.convert(…) 函式可輕鬆介面,用於簡單的比對檔案格式轉換。此外,它可能會使用檔案格式特定的最佳化,因此這也應該是最快的方式。

但是,一般而言,您可以將 Bio.AlignIO.parse(…) 函式與 Bio.AlignIO.write(…) 函式結合使用,以進行序列檔案轉換。使用產生器運算式可提供記憶體效率高的方式,在處理過程中執行篩選或其他額外運算。

檔案格式

指定檔案格式時,請使用小寫字串。相同的格式名稱也用於 Bio.SeqIO 中,包括以下內容

  • clustal - Clustal W 或 X 的輸出。

  • emboss - EMBOSS 工具的「pairs」和「simple」比對格式。

  • fasta - 通用序列檔案格式,其中每個記錄都以一個以「>」字元開頭的識別碼行開始,後跟序列行。

  • fasta-m10 - 用於 Bill Pearson 的 FASTA 工具在使用 -m 10 命令列選項進行機器可讀輸出時輸出的成對比對。

  • ig - IntelliGenetics 檔案格式,顯然與 MASE 比對格式相同。

  • msf - GCG MSF 比對格式,最初來自 PileUp 工具。

  • nexus - NEXUS 的輸出,另請參閱 Bio.Nexus 模組,該模組也可以讀取這些檔案中的任何系統發育樹。

  • phylip - 交錯的 PHYLIP,由 PHYLIP 工具使用。

  • phylip-sequential - 連續的 PHYLIP。

  • phylip-relaxed - 允許較長名稱的類似 PHYLIP 的格式。

  • stockholm - PFAM 使用的帶有豐富註釋的比對檔案格式。

  • mauve - progressiveMauve/Mauve 的輸出

請注意,雖然 Bio.AlignIO 可以讀取所有上述檔案格式,但無法寫入所有這些格式。

您也可以使用 Bio.SeqIO 支援的任何檔案格式,例如「fasta」或「ig」(以上列出),前提是檔案中的序列長度都相同。

Bio.AlignIO.write(alignments, handle, format)

將完整的一組比對寫入檔案。

引數
  • alignments - MultipleSeqAlignment 物件的清單(或迭代器),或單一比對物件。

  • handle - 要寫入的檔案處理常式物件,或作為字串的檔名(請注意,舊版本的 Biopython 只接受處理常式)。

  • format - 描述要寫入的檔案格式的小寫字串。

您應該在呼叫此函式後關閉處理常式。

傳回寫入的比對數量(以整數形式)。

Bio.AlignIO.parse(handle, format, seq_count=None)

以 MultipleSeqAlignment 物件的形式逐一查看比對檔案。

引數
  • handle - 檔案的處理常式,或作為字串的檔名(請注意,舊版本的 Biopython 只接受處理常式)。

  • format - 描述檔案格式的字串。

  • seq_count - 選擇性整數,每個比對中預期的序列數量。建議用於 fasta 格式檔案。

如果您的檔名是字串「filename」,請使用

>>> from Bio import AlignIO
>>> filename = "Emboss/needle.txt"
>>> format = "emboss"
>>> for alignment in AlignIO.parse(filename, format):
...     print("Alignment of length %i" % alignment.get_alignment_length())
Alignment of length 124
Alignment of length 119
Alignment of length 120
Alignment of length 118
Alignment of length 125

如果您的字串「data」包含檔案內容,請使用

from Bio import AlignIO
from io import StringIO
my_iterator = AlignIO.parse(StringIO(data), format)

當您只預期單一記錄時,請使用 Bio.AlignIO.read() 函式。

Bio.AlignIO.read(handle, format, seq_count=None)

將一個序列比對檔案轉換成單一個 MultipleSeqAlignment 物件。

引數
  • handle - 檔案的處理常式,或作為字串的檔名(請注意,舊版本的 Biopython 只接受處理常式)。

  • format - 描述檔案格式的字串。

  • seq_count - 選擇性整數,每個比對中預期的序列數量。建議用於 fasta 格式檔案。

如果 handle 中沒有任何比對,或有多個比對,則會引發例外。例如,使用一個包含一個比對的 PFAM/Stockholm 檔案。

>>> from Bio import AlignIO
>>> filename = "Clustalw/protein.aln"
>>> format = "clustal"
>>> alignment = AlignIO.read(filename, format)
>>> print("Alignment of length %i" % alignment.get_alignment_length())
Alignment of length 411

然而,如果您想從包含多個比對的檔案中讀取第一個比對,此函式會引發例外。

>>> from Bio import AlignIO
>>> filename = "Emboss/needle.txt"
>>> format = "emboss"
>>> alignment = AlignIO.read(filename, format)
Traceback (most recent call last):
    ...
ValueError: More than one record found in handle

請改用

>>> from Bio import AlignIO
>>> filename = "Emboss/needle.txt"
>>> format = "emboss"
>>> alignment = next(AlignIO.parse(filename, format))
>>> print("First alignment has length %i" % alignment.get_alignment_length())
First alignment has length 124

如果您想從 handle 讀取多個紀錄,您必須使用 Bio.AlignIO.parse() 函式。

Bio.AlignIO.convert(in_file, in_format, out_file, out_format, molecule_type=None)

在兩個比對檔案之間轉換,回傳比對的數量。

引數
  • in_file - 輸入的 handle 或檔名

  • in_format - 輸入檔案格式,小寫字串

  • output - 輸出的 handle 或檔名

  • out_file - 輸出檔案格式,小寫字串

  • molecule_type - 選擇性的分子類型,字串包含 "DNA"、"RNA" 或 "protein"。

注意 - 如果您提供輸出的檔名,它將會被開啟,這會覆寫任何現有的檔案而沒有警告。即使轉換被中止(例如,給定一個無效的 out_format 名稱)也可能會發生這種情況。

有些輸出格式要求指定分子類型,而這無法由剖析器決定。例如,轉換為 FASTA、Clustal 或 PHYLIP 格式到 NEXUS

>>> from io import StringIO
>>> from Bio import AlignIO
>>> handle = StringIO()
>>> AlignIO.convert("Phylip/horses.phy", "phylip", handle, "nexus", "DNA")
1
>>> print(handle.getvalue())
#NEXUS
begin data;
dimensions ntax=10 nchar=40;
format datatype=dna missing=? gap=-;
matrix
Mesohippus   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Hypohippus   AAACCCCCCCAAAAAAAAACAAAAAAAAAAAAAAAAAAAA
Archaeohip   CAAAAAAAAAAAAAAAACACAAAAAAAAAAAAAAAAAAAA
Parahippus   CAAACAACAACAAAAAAAACAAAAAAAAAAAAAAAAAAAA
Merychippu   CCAACCACCACCCCACACCCAAAAAAAAAAAAAAAAAAAA
'M. secundu' CCAACCACCACCCACACCCCAAAAAAAAAAAAAAAAAAAA
Nannipus     CCAACCACAACCCCACACCCAAAAAAAAAAAAAAAAAAAA
Neohippari   CCAACCCCCCCCCCACACCCAAAAAAAAAAAAAAAAAAAA
Calippus     CCAACCACAACCCACACCCCAAAAAAAAAAAAAAAAAAAA
Pliohippus   CCCACCCCCCCCCACACCCCAAAAAAAAAAAAAAAAAAAA
;
end;