python字串輸入小圓點 第6章 多序列比對

2021-10-11 12:14:21 字數 3253 閱讀 3910

6.5.1 clustalw¶

我們建議你在python中使用clustalw之前在命令列介面下手動使用clustalw,這樣能使你更清楚這一程式的引數。你會發現biopython打包程式非常嚴格地遵循實際的命令列api:

>>>help(clustalwcommandline)

clustalw在預設情況下會產生乙個包括所有輸入序列的序列比對以及乙個由輸入序列名字構成的指導樹(guide tree)。例如,用上述檔案作為輸入,clustalw將會輸出 opuntia.aln 和 opuntia.dnd 兩個檔案:

>>>cline = clustalwcommandline("clustalw2", infile="opuntia.fasta")

>>>print(cline)

clustalw2 -infile=opuntia.fasta

注意這裡我們給出的執行檔名是 clustalw2 ,這是clustalw的第二個版本(第乙個版本的檔名為 clustalw )。clustalw的這兩個版本具有相同的引數,並且在功能上也是一致的。

你可能會發現,儘管你安裝了clustalw,以上的命令列卻無法正確執行。你可能會得到「command not found」的錯誤資訊(尤其是在windows上)。這往往是由於clustalw的執行程式並不在系統的工作目錄path下(乙個包含著執行程式路徑的環境變數)。你既可以修改path,使其包括clustalw的執行程式(不同系統需要以不同的方式修改),或者你也可以直接指定程式的絕對路徑。例如:

>>>import os

>>>clustalw_exe = r"c:\program files\new clustal\clustalw2.exe"

>>>clustalw_cline = clustalwcommandline(clustalw_exe, infile="opuntia.fasta")

>>>assert os.path.isfile(clustalw_exe), "clustal w executable missing"

>>>stdout, stderr = clustalw_cline()

注意,python中 \n 和 \t 會被解析為乙個新行和製表空白(tab)。然而,如果你將乙個小寫的「r」放在字串的前面,這一字串就將保留原始狀態,而不被解析。這種方式對於指定windows風格的檔名來說是一種良好的習慣。

biopython在內部使用較新的 subprocess 模組來實現打包程式,而不是 os.system() 和 os.popen* 。

現在,我們有必要去了解命令列工具是如何工作的。當你使用乙個命令行時,它往往會在螢幕上輸出一些內容。這一輸出可以被儲存或重定向。在系統輸出中,有兩種管道(pipe)來區分不同的輸出資訊–標準輸出(standard output)包含正常的輸出內容,標準錯誤(standard error)顯示錯誤和除錯資訊。同時,系統也接受標準輸入(standard input)。這也是命令列工具如何讀取資料檔案的。當程式執行結束以後,它往往會返回乙個整數。一般返回值為0意味著程式正常結束。

當你使用biopython打包程式來呼叫命令列工具的時候,它將會等待程式結束,並檢查程式的返回值。如果返回值不為0,biopython將會提示乙個錯誤資訊。biopython打包程式將會輸出兩個字串,標準輸出和標準錯誤。

在clustalw的例子中,當你使用程式時,所有重要的輸出都被儲存到輸出檔案中。所有列印在螢幕上的內容(通過 stdout or stderr)可以被忽略掉(假設它已經成功執行)。

當執行clustalw的時候,我們所關心的往往是輸出的序列比對檔案和指導樹檔案。clustalw會自動根據輸入資料的檔名來命名輸出檔案。在本例中,輸出檔案將是 opuntia.aln 。當你成功執行完clustalw以後,你可以使用 bio.alignio 來讀取輸出結果:

>>>from bio import alignio

>>>align = alignio.read("opuntia.aln", "clustal")

>>>print(align)

singleletteralphabet() alignment with 7 rows and 906 columns

tatacattaaagaagggggatgcggataaatggaaaggcgaaag...aga gi|6273285|gb|af191659.1|af191

tatacattaaagaagggggatgcggataaatggaaaggcgaaag...aga gi|6273284|gb|af191658.1|af191

tatacattaaagaagggggatgcggataaatggaaaggcgaaag...aga gi|6273287|gb|af191661.1|af191

tatacataaaagaagggggatgcggataaatggaaaggcgaaag...aga gi|6273286|gb|af191660.1|af191

tatacattaaaggagggggatgcggataaatggaaaggcgaaag...aga gi|6273290|gb|af191664.1|af191

tatacattaaaggagggggatgcggataaatggaaaggcgaaag...aga gi|6273289|gb|af191663.1|af191

tatacattaaaggagggggatgcggataaatggaaaggcgaaag...aga gi|6273291|gb|af191665.1|af191

另乙個輸出檔案 opuntia.dnd 中包含有乙個newick格式的指導樹,你可以使用biopython中的 bio.phylo 來讀取它:

>>>from bio import phylo

>>>tree = phylo.read("opuntia.dnd", "newick")

>>>phylo.draw_ascii(tree)

_______________ gi|6273291|gb|af191665.1|af191665

| | ______ gi|6273290|gb|af191664.1|af191664

| |_____ gi|6273289|gb|af191663.1|af191663

_|_________________ gi|6273287|gb|af191661.1|af191661

|__________ gi|6273286|gb|af191660.1|af191660

| __ gi|6273285|gb|af191659.1|af191659

| gi|6273284|gb|af191658.1|af191658

13 章中詳細介紹了如何使用biopython對進化樹資料進行處理。

字串輸入

之前在學習input的時候,通過它能夠完成從鍵盤獲取資料,然後儲存到指定的變數中 注意 input獲取的資料,都以字串的方式進行儲存,即使輸入的是數字,那麼也是以字串方式儲存 demo username input 請輸入使用者名稱 print 使用者名為 s username password i...

python計算輸入的字串

這裡參考來乙個python的統計字串的程式,中文當作是字母來處理,大部分使用的自帶的函式來處理,如果我們在面試中遇見沒有使用過的函式,我們可以使用排除來得到我們想要的 s input input a string n letters 0 space 0 digit 0 other 0 for c i...

python字串 Python 字串

建立字串很簡單,只要為變數分配乙個值即可。例如 var1 hello world var2 python runoob python訪問字串中的值python不支援單字元型別,單字元在 python 中也是作為乙個字串使用。python訪問子字串,可以使用方括號來擷取字串,如下例項 例項 pytho...