-2

fasta ファイル (約 1000 シーケンス) から各シーケンスを読み取り、それぞれを二次構造予測用の別のアプリケーション (RNAfold) への入力として使用するプログラムが必要です。私はパイソンを使用しています。出来ますか?誰かが開始のガイドラインコードを教えてくれませんか?

@Lennart私はコードを以下のものに変更しました:

$

      from Bio import SeqIO
      import subprocess, re
      PIPE = -1


    handle = open ("D:\python\hsa.fa", "rU")

for record in SeqIO.parse(handle, "fasta"):

output = subprocess.Popen("D:\python\RNAfold.exe -p -d2 --noLP -P", shell=True, stdin = PIPE, stdout = PIPE)

 print output
handle.close()

そして、RNAfold の出力とは関係のない次の出力が得られます。コードの何が問題なのですか?

<subprocess.Popen object at 0x02CCEE90>
<subprocess.Popen object at 0x02CCEF30>
<subprocess.Popen object at 0x02CCEF70>
<subprocess.Popen object at 0x02CCEFB0>
<subprocess.Popen object at 0x02CCEB90>
<subprocess.Popen object at 0x02CCEE30>
<subprocess.Popen object at 0x02CCECD0>
<subprocess.Popen object at 0x02CCED90>
<subprocess.Popen object at 0x02CCEEB0>
4

3 に答える 3

2

まず:

for record in SeqIO.parse(handle, "fasta"):
         seq = record.seq

seq を最後のレコードの seq に設定します。それは役に立ちません。あなたはおそらく何か他のことをしたいでしょう。

第 2 に、RNAfold.exe は標準入力からデータを読み取っているように見えるため、これを行う最も簡単な方法は、フィードしたいデータを含むファイルを生成することです。Python から呼び出してもほとんど意味がありません。代わりにデータをファイルに書き込みます。

全体として、あなたのプログラムは典型的な初心者のエラーを示しています: プログラム全体を一度に書き込もうとしていて、それがうまくいかないときは、プログラムを分析して問題を見つけようとします。

代わりに、プログラムをビットごとに記述し、各ビットが実際に想定どおりに動作することを常に検証する必要があります。

于 2012-04-23T19:30:42.747 に答える
1

「出力」と呼ぶオブジェクトは出力されず、プロセスオブジェクトです。出力はoutput.stdoutから取得されます。

于 2012-04-24T17:09:41.850 に答える
0

私はPythonを使用してRNAフォールドも実行しています。このコードは cofold で機能します...入力ファイルを書き込み、それを閉じて 'read で開き、次に出力ファイルを書き込みで開き、実行可能ファイルを実行し、ファイルを閉じて出力ファイルを読み取ります...

        in_w = open('temp_RNAcofold_inputs_24544.txt', 'w')
        in_w.write(sequence1.replace(' ','') + '&' + sequence2.replace(' ',''))
        in_w.close()
        in_r=open('temp_RNAcofold_inputs_24544.txt', 'r')
        out_w = open('temp_RNAcofold_ouputs_24544.txt', 'w' )
        p = subprocess.Popen('C:/Users/s1342417/Dropbox/PhD_work/ViennaRNA_Package/RNAcofold.exe' '-a' , stdin = in_r , stdout = out_w  ,shell =True )
        p.wait()
        out_w.close()
        in_r.close()
        out_r = open('temp_RNAcofold_ouputs_24544.txt','r')
        output = ''
        for line in out_r :
            output = output + out_r.readline()
            print ('a'+str(output))
        out_r.close()
        os.remove('temp_RNAcofold_ouputs_24544.txt')
        os.remove('temp_RNAcofold_inputs_24544.txt')
于 2014-05-21T15:36:37.480 に答える