【发布时间】:2015-05-21 21:22:20
【问题描述】:
我是初学者。我用以下伪代码编写了一个 Python 程序:
- 定义函数1。
一个。这个函数需要一个大的单个 fasta 文件(一个基因组)并将其拆分为多个片段。
b.这些片段被写入一个 multi-fasta 输出文件(例如下面)。
- 定义函数2。
一个。该函数读取multi-fasta文件的行数
b.将 fasta id 后跟 fasta 条目的长度写入输出文件。
大部分代码:
from Bio import SeqIO
import io
def metagenome_simulator(genome_fasta, out_file):
outfile = open(out_file, "a+b")
fasta = SeqIO.parse(open(genome_fasta, "rU"), "fasta")
#does the split, blah, blah - I know this function works on its own already
len_file.close()
fasta.close()
return outfile
def contig_len_calculator(fasta, out_file):
outfile = io.open(out_file, "wb")
fhandle = io.open(fasta, "a+b")
outfile.write("contig_id" + "\t" + "contig_length" + "\n")
for entry in SeqIO.parse(fhandle, "fasta"):
#calculates lengths, blah, blah - i know this works independently too
outfile.close()
fhandle.close()
return
def main():
output = metagenome_simulator(sys.argv[1], sys.argv[2])
print(output)
contig_len_calculator(output, sys.argv[3])
main()
我的命令(bash shell)是:
./this_script.py genome_fasta_file split_fasta_out_file final_output_file.
输出将是两个单独的文件,一个用于程序中的每个函数。第一个是拆分fasta:
>split_1
ATCG....
>split_2
ATCG....
.
.
.
第二个是长度文件:
>split_1 300
>split_2 550
.
.
.
这不起作用。它可以很好地运行 Fuction1 并生成 split_fasta_output 文件,但随后返回:
<open file 'out_file', mode 'a+b' at 0x7f54b8454d20>
Traceback (most recent call last):
File "./this_script.py", line 62, in <module>
main()
File "./this_script.py", line 60, in main
contig_len_calculator(output, sys.argv[3])
File "./this_script.py", line 47, in contig_len_calculator
fhandle = io.open(fasta, "a+b")
TypeError: invalid file: <open file 'out_file', mode 'a+b' at 0x7f54b8454d20>
我不知道为什么它不起作用。所以我的问题是:如何正确地将在一个函数中创建的文件传递给另一个函数?
编辑:把整个回溯错误。
【问题讨论】:
-
嘿布兰登,这里没有足够的信息来完全调试您的问题。能否包含 TypeError 的完整堆栈跟踪?
-
已编辑,希望对您有所帮助。我基本上只是想知道如何在第一个函数中创建一个文件(我知道它工作得很好,并制作文件并放入 cwd),然后将该文件作为输入传递给第二个函数以执行其他操作给它。
标签: python function file ubuntu