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

Python 运行此代码时我做错了什么?,python,list,fasta,Python,List,Fasta,首先,我绝不是一个编程专家,也不精通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 = S

首先,我绝不是一个编程专家,也不精通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
文件“filter.py”,第7行,在
需要=[line.strip()用于打开的行(sys.argv[2])]
索引器:列表索引超出范围
我希望它能帮助你

打开(sys.argv[2])作为文件:
对于文件中的行:

只有在运行程序时未向程序传递预期数量的参数时,才会发生您描述的异常。
sys.argv
变量包含程序的参数。它将是一个列表,
sys.argv[0]
将具有脚本本身的文件名,而后面的值将是传入的后面的参数

程序的docstring(
%prog file.fasta-id.txt
)建议您向程序传递两个参数,其中一个是
.fasta
文件,另一个是
.txt
文件。您忽略了其中一个或两个参数,因此程序无法查找
sys.argv[2]
,并引发一个
索引器

您可能希望向程序中添加代码,以检查参数的数量,并在获得错误数量时提供更有用的异常:

from Bio import SeqIO
import sys

if len(sys.argv) != 3:
    sys.exit("Bad arguments! Usage: {} <file.fasta> <wanted_ids.txt>".format(sys.argv[0]))

wanted = [line.strip() for line in open(sys.argv[2])]
#...
来自Bio导入序列
导入系统
如果len(sys.argv)!=三:
sys.exit(“错误参数!用法:{}”。格式(sys.argv[0]))
需要=[line.strip()用于打开的行(sys.argv[2])]
#...

当您不理解时,请尽量避免列表理解,并使用打印出的值进行调试。请阅读。问题标题应该是问题的摘要,不鼓励使用“为什么此代码不起作用”之类的标题。最好添加一些解释,以便用户更容易地使用您的答案。只有代码的答案有时无法满足用户的需求,而且很难理解-查看