我有一个脚本,可以搜索一个csv文件和一个fasta文件,两个文件中的所有ID都将用于从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)
尝试分别搜索fasta文件,但相对于上面脚本中的第38行,我得到了错误:TypeError: list indices must be integers or slices, not str
:
sequence = fasta[name]
任何帮助或建议将不胜感激!
答案 0 :(得分:0)
尝试为格式化和提取生物信息学数据提供自己的解决方案是一个很好的挑战,但是通常在完成此操作之前,请您省去头痛。您可以使用吉姆·肯特(Jim Kent)的faSomeRecords
(找到的here)或类似cut -c 2- EXAMPLE.TXT | xargs -n 1 samtools faidx EXAMPLE.FA
这样的令人困惑的单线纸,但它仍然需要samtools。另外,如果您还不了解SO for bioinformatics,还有SO bioinformatics。