Ошибка Python: OSError: ошибка при открытии файла `all_fprau.fasta`. Фаста файл слишком большой?
У меня есть скрипт, который выполняет поиск в файле CSV и файле fasta, и любые идентификаторы в обоих файлах будут использоваться для извлечения последовательности fasta из файла fasta. Это выглядит так:
import os
import shlex
import subprocess
import argparse
import glob
import pysam
from pysam import FastaFile
#setup options for this program
parser = argparse.ArgumentParser()
group = parser.add_argument_group('Options for annotation.py')
group.add_argument(
'-f', '--fasta', help='FASTA file (RAST). all_fprau.fasta', required=True)
group.add_argument(
'-c', '--csv', help='CSV file (parsed orthomcl groups). parsed_groups.csv',
required=True)
args = parser.parse_args()
fasta = FastaFile(args.fasta)
with open(args.csv) as infile:
infile.readline() ## skip header
for index, line in enumerate(infile):
strain, matches = line.strip().split("\t")
if not len(matches):
print('Warning: Skipping strain {}. No matches'.format(strain))
continue
matches = set(matches.split(',')) # remove duplicates
key = '{}.faa'.format(strain)
with open(key, 'w') as out_file:
for match in matches:
name = 'fig|{}'.format(match)
try:
sequence = fasta[name]
except KeyError:
print('Sequence absent in FASTA file {0}: {1}'.format(args.fasta, name))
continue
out_file.write(">{0}\n{1}\n".format(name, sequence))
Однако у меня возникла проблема с запуском этого скрипта. Я получаю эту ошибку:
File "pysam/libcfaidx.pyx", line 123, in pysam.libcfaidx.FastaFile.__cinit__
File "pysam/libcfaidx.pyx", line 183, in pysam.libcfaidx.FastaFile._open
OSError: error when opening file `all_fprau.fasta`
Фаста файл all_fprau.fasta
содержит большое количество последовательностей, и я думаю, что это может быть проблемой? Когда я сокращаю размер файла, скрипт работает, однако мне нужно, чтобы все последовательности были доступны для следующего шага в этом конвейере. Я пытался использовать:
fasta = glob.glob("/home/brian/my_orthomcl_dir/annotations/*.fasta")
на месте
fasta = FastaFile(args.fasta)
при попытке поиска по файлам fasta индивидуально, но я получаю сообщение об ошибке: TypeError: list indices must be integers or slices, not str
относительно строки 38 в приведенном выше сценарии:
sequence = fasta[name]
Любая помощь или предложения будут очень признательны!
1 ответ
Хорошо попытаться создать собственное решение для форматирования и извлечения биоинформационных данных для решения этой проблемы, но обычно это было сделано раньше, поэтому избавьте себя от головной боли. Вы могли бы использовать Джима Кента faSomeRecords
(найденный здесь) или некоторый запутанный однострочный как: cut -c 2- EXAMPLE.TXT | xargs -n 1 samtools faidx EXAMPLE.FA
но это все еще требует samtools. Кроме того, если вы еще не знаете, существует своего рода SO для биоинформатики, но также и для SO биоинформатики.