-2

我需要一个程序从fasta文件(大约1000个序列)中读取每个序列,并将每个序列用作另一个应用程序(RNAfold)的输入以进行二级结构预测。我正在使用python。可能吗?有人可以给我一个指导代码吗?

@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 。这听起来没什么用。你可能想做点别的。

其次,由于 RNAfold.exe 显然是从标准输入读取数据,因此最简单的方法是生成一个包含您想要提供的数据的文件。从 Python 调用它没有什么意义,而是将数据写入文件。

总而言之,您的程序表现出一个典型的初学者错误:您试图一口气编写整个程序,然后当它不起作用时,您尝试分析程序以发现问题。

相反,您需要一点一点地编写程序,并始终验证每个位是否确实按照您的想法进行。

于 2012-04-23T19:30:42.747 回答
1

The object you call "output" is not output, it is a process object. The output comes from output.stdout.

于 2012-04-24T17:09:41.850 回答
0

我也在使用 python 来运行 RNA 折叠。此代码适用于 cofold ...写入输入文件并关闭它在“读取”中打开它然后在写入中打开输出文件,运行可执行文件,然后关闭文件并读取输出文件...

        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 回答