私はBio.Align.ApplicationsのMafftアライメントツールを使用しようとしています。現在、MafftCommandline()によって読み込まれた一時的なテキストファイルにシーケンス情報を書き込むことに成功しました。しかし、できるだけ冗長なステップを避けたいので、io.StringIO()を使用する代わりにメモリファイルに書き込もうとしています。これは私が問題を抱えてきた場所です。私はMafftCommandline()にio.StringIO()によって作られた内部ファイルを読み込ませることができません。内部ファイルがAlignIO.read()などの関数と互換性があることを確認しました。以下は、私のテストコードです:MafftCommandlineとio.StringIO
from Bio.Align.Applications import MafftCommandline
from Bio import SeqIO
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
import io
from Bio import AlignIO
sequences1 = ["AGGGGC",
"AGGGC",
"AGGGGGC",
"AGGAGC",
"AGGGGG"]
longest_length = max(len(s) for s in sequences1)
padded_sequences = [s.ljust(longest_length, '-') for s in sequences1] #padded sequences used to test compatibilty with AlignIO
ioSeq = ''
for items in padded_sequences:
ioSeq += '>unknown\n'
ioSeq += items + '\n'
newC = io.StringIO(ioSeq)
cLoc = str(newC).strip()
cLocEdit = cLoc[:len(cLoc)] #create string to remove <and>
test1Handle = AlignIO.read(newC, "fasta")
#test1HandleString = AlignIO.read(cLocEdit, "fasta") #fails to interpret cLocEdit string
records = (SeqRecord(Seq(s)) for s in padded_sequences)
SeqIO.write(records, "msa_example.fasta", "fasta")
test1Handle1 = AlignIO.read("msa_example.fasta", "fasta") #alignIO same for both #demonstrates working AlignIO
in_file = '.../msa_example.fasta'
mafft_exe = '/usr/local/bin/mafft'
mafft_cline = MafftCommandline(mafft_exe, input=in_file) #have to change file path
mafft_cline1 = MafftCommandline(mafft_exe, input=cLocEdit) #fails to read string (same as AlignIO)
mafft_cline2 = MafftCommandline(mafft_exe, input=newC)
stdout, stderr = mafft_cline()
print(stdout) #corresponds to MafftCommandline with input file
stdout1, stderr1 = mafft_cline1()
print(stdout1) #corresponds to MafftCommandline with internal file
私は、次のエラーメッセージが出ます:
のApplicationError:「は/ usr/local/binに/ 0x10f439798で< _io.StringIOオブジェクトをMAFFTからゼロ以外の戻りコード2を> '、message "/ bin/sh:-c:予期しないトークン` newline'の近くで構文エラー " ファイルパスに矢印( '<'と '>')があると考えられます。
ApplicationError: '/ usr/local/bin/mafft'からのゼロ以外の戻りコード1 '0x10f439af8' 'メッセージの/io.StringIOオブジェクト'/usr/local/bin/mafft:_io.StringIOオブジェクトを開けません0x10f439af8。 ' ファイルパスを文字列とインデックスに変換して矢印を削除しようとすると、上記のエラーが発生しました。
最終的に私の目標は、計算時間を短縮することです。別のテキストファイルに書き出すのではなく、内部メモリを呼び出すことでこれを実現したいと考えています。私の目標に関するアドバイスやフィードバックは非常に高く評価されます。前もって感謝します。