Что я делаю не так при запуске этого кода? - PullRequest
0 голосов
/ 22 апреля 2019

Во-первых, я ни в коем случае не эксперт по программированию и не очень хорошо разбираюсь в python, так что извините, если это глупый вопрос. Я пытаюсь запустить приведенный ниже код, чтобы отфильтровать файл fastta по тем последовательностям, которые я хочу, используя файл «ID», но каждый раз, когда я запускаю его, я получаю сообщение об ошибке. Любая помощь с благодарностью!

"""
%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

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Исключение, которое вы описываете, может возникнуть, только если вы не передали ожидаемое количество аргументов вашей программе при ее запуске. Переменная sys.argv содержит аргументы программы. Это будет список, и sys.argv[0] будет содержать имя файла самого скрипта, в то время как более поздние значения будут передаваться позже.

Строка документации вашей программы (%prog file.fasta wanted_ids.txt) предполагает, что вы должны передать программе два аргумента, один из которых - файл .fasta, а другой - файл .txt. Вы пропускаете один или оба этих аргумента, поэтому программа не может выполнить поиск sys.argv[2] и вызывает IndexError.

Возможно, вы захотите добавить код в вашу программу, чтобы проверить количество аргументов и дать более полезное исключение, если вы получите неправильное число:

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])]
#...
0 голосов
/ 22 апреля 2019

Я надеюсь, что это может помочь вам with open (sys.argv[2]) as file_: for line in file_:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...