Ошибка Python: OSError: ошибка при открытии файла `all_fprau.fasta`. Файл Fasta слишком велик? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть скрипт, который просматривает 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`

Файл fasta all_fprau.fasta содержит большое количество последовательностей, и я думаю, что это может быть проблемой? Когда я сокращаю размер файла, скрипт работает, однако мне нужно, чтобы все последовательности были доступны для следующего шага в этом конвейере. Я пытался использовать:

fasta = glob.glob("/home/brian/my_orthomcl_dir/annotations/*.fasta") 

вместо

fasta = FastaFile(args.fasta)

при попытке поиска по файлам fastta по отдельности, но я получаю ошибку: TypeError: list indices must be integers or slices, not str, относительно строки 38 в приведенном выше сценарии:

sequence = fasta[name]

Любая помощь или предложения будут очень признательны!

1 Ответ

0 голосов
/ 27 июня 2018

Хорошо бы попытаться создать собственное решение для форматирования и извлечения биоинформационных данных для решения этой проблемы, но обычно это делается раньше, поэтому избавьте себя от головной боли. Вы можете использовать faSomeRecords Джима Кента (найден здесь ) или какой-то запутанный однострочный текст, например: cut -c 2- EXAMPLE.TXT | xargs -n 1 samtools faidx EXAMPLE.FA, но для него все еще требуются samtools. Кроме того, если вы еще не знаете, существует тип SO для биоинформатики , но также SO для биоинформатики .

...