运行此代码时我做错了什么?

首先,我绝不是编程专家,也不精通python,如果这是一个愚蠢的问题,请原谅我。我正在尝试运行下面的代码,以使用“ID”文件将 fasta 文件过滤到我想要的序列,但每次运行它时,都会出现错误。任何帮助是极大的赞赏!


"""

%prog file.fasta wanted_ids.txt

"""

from Bio import SeqIO

import sys


wanted = [line.strip() for line in open(sys.argv[2])]

seqiter = SeqIO.parse(open(sys.argv[1]), 'fasta')

SeqIO.write((seq for seq in seqiter if seq.id in wanted), sys.stdout, "fasta")

这是我得到的错误:


File "filter.py", line 7, in <module>

    wanted = [line.strip() for line in open(sys.argv[2])]

IndexError: list index out of range


手掌心
浏览 143回答 2
2回答

烙印99

我希望它可以帮助你&nbsp;with open (sys.argv[2]) as file_: &nbsp; &nbsp;for line in file_:

红颜莎娜

只有在运行程序时没有将预期数量的参数传递给程序时,才会发生您描述的异常。该sys.argv变量包含程序的参数。它将是一个列表,并且sys.argv[0]将具有脚本本身的文件名,而后面的值将是后面传入的参数。您的程序的文档字符串 ( %prog file.fasta wanted_ids.txt) 表明您需要将两个参数传递给程序,一个是.fasta文件,另一个是.txt文件。您忽略了其中一个或两个参数,因此程序无法执行查找sys.argv[2], 并引发IndexError.你可能想在你的程序中添加代码来检查参数的数量,并在你得到错误的数字时给出一个更有帮助的异常:from Bio import SeqIOimport sysif len(sys.argv) != 3:&nbsp; &nbsp; sys.exit("Bad arguments! Usage: {} <file.fasta> <wanted_ids.txt>".format(sys.argv[0]))wanted = [line.strip() for line in open(sys.argv[2])]#...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python