題:
有什麼方法可以使用biopython編寫Swissprot文件嗎?
James
2017-06-29 13:58:04 UTC
view on stackexchange narkive permalink

我有以下mwe用於基於某種功能(在本例中為跨膜區域)過濾Swissprot文件。

 來自生物導入SeqIOrecords = []用於SeqIO.parse(“ Input.txt”,“ swiss”)中的記錄:transmembrane_protein = i的虛假print record.id,枚舉(記錄) .features):if feature.type ==“ TRANSMEM”:transmembrane_protein = True如果transmembrane_protein == True:records.append(record)SeqIO.write(records,“ Output.txt”,“ swiss”) 

SeqIO.write(records,“ Output.txt”,“ swiss”)變為 SeqIO.write(records,“ Output.txt”,“ fasta”)

但是,尚不支持這種方法。

  ValueError:支持讀取格式“ swiss”,但不寫入 

從文檔中,我看到瑞士不支持寫入

請注意,儘管Bio.SeqIO可以讀取上述所有文件格式,但無法寫入所有文件格式。

是否存在使用biopython / python從解析的swissprot文件寫入swissprot文件的任何非官方方式?

我讀到“ SeqIO無法輸出文件格式(例如,純文本SwissProt格式,“ swiss”)”。但是,一旦知道所需功能的ID,就可以不使用Biopython粘貼蛋白質
它肯定在某些我可以確定的文檔中,但我只是沒有看到它的明確說明,但是它在錯誤處理中指出,因此足以讓我知道沒有簡單的方法。我正在處理幾種蛋白質組。手動粘貼不會很有趣;)我真的可以使用程序化解決方案。
您可以使用grep或awk選擇記錄,然後使用管道將其輸出到另一個文件中。
@Llopis當然是前進的一種方式。但是,我想將該腳本保存在單個python文件中,因為它是跨平台的並且可移植。
二 答案:
sjcockell
2017-06-29 16:14:06 UTC
view on stackexchange narkive permalink

使用 SeqIO.index 而不是 SeqIO.parse ,您可以將所有記錄讀取到 dict 中,然後從中提取內容原始條目:

 來自生物導入SeqIOrecord_dict = SeqIO.index('Input.txt','swiss')for record_dict中的鍵:print(record_dict .get_raw(key).decode()) 

現在,您應該可以對每個跨膜蛋白進行測試,並只寫出您想要保留的蛋白。

 來自生物導入SeqIOrecord_dict = SeqIO.index('Input.txt','swiss')out = open('Output.txt','wb ')用於record_dict中的密鑰:record = record_dict [key] for i,枚舉中的特徵(record.features):if feature.type ==“ TRANSMEM”:out.write(record_dict.get_raw(key).decode())  
完美的解決方案,就像魅力一樣。
terdon
2017-06-29 16:26:36 UTC
view on stackexchange narkive permalink

我不知道如何使用biopython做到這一點,但是在Perl中使用 Swisskinfe很簡單:

 #!/ usr / bin / env嚴格執行;使用警告;使用SWISS :: Entry; my $ flat = $ ARGV [0] || die(“需要平面文件\ n”); ##更改行終止字符串,以便我們在本地時間讀取##整個條目$ / =“ \ n // \ n”; my $ fh; ##處理壓縮或未壓縮的文件if($ flat =〜/ \。gz $ /){open ($ fh,“ zcat $ flat |”)|| die(“無法打開平面文件$ flat:$!\ n”);} else {open($ fh,“ $ flat”)|| die(“無法打開平面文件$ flat:$ !: $ @ \ n”);} ##解析文件。 entry:while(我的$ current_entry = < $ fh>){##將當前條目作為“ entry”對象讀取my $ entry = SWISS :: Entry->fromText($ current_entry); ##為每個我的$ feature($ entry->FTs->elements())迭代條目的功能{##如果任何功能是'TRANSMEM',則在($ feature-> [0] eq'TRANSMEM' ){打印“ $ current_entry \ n”; ##跳至下一條目;下一條目; }}}  

您需要先安裝Swissknife模塊:

  1. 此處下載Swissknife_1.73.tar.gz(SourceForge鏈接)。

  2. 安裝

      tar xvzf Swissknife.tar.gzcd Swissknife_1.73 / perl Makefile.PLsudo make install  
  3. ol>

    現在,使上述腳本可執行,並運行:

      foo.pl file.flat  


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...