AlignIO无法在FASTA文件中找到记录

时间:2013-03-07 22:05:51

标签: python biopython

我想开始使用Biopython来对齐序列文件,但是库不断给我错误。我的代码如下:

from Bio import AlignIO
import Bio

alignment = AlignIO.read("A_prot.fasta","fasta")
print alignment

我确保将A_prot.fasta放在与我的程序相同的目录中,但收到错误消息:

Traceback (most recent call last):
  File "bio_seq_align.py", line 5, in <module>
   alignment = AlignIO.read("A_prot.fasta","fasta")
  File "/usr/lib/python2.7/site-packages/biopython-1.61-py2.7-linux-i686.egg/Bio/AlignIO/__init__.py", line 427, in read
raise ValueError("No records found in handle")
ValueError: No records found in handle

2 个答案:

答案 0 :(得分:0)

您可能会遇到“ValueError:在句柄中找不到记录”的一个原因是您机器上的文件实际上是空的。

使用您在上述评论中链接到的ftp://ftp.ebi.ac.uk/pub/databases/ipd/imgt/hla/A_prot.fasta会发生这种情况,

>>> from Bio import AlignIO
>>> align = AlignIO.read("A_prot.fasta", "fasta")
Traceback (most recent call last):
...
ValueError: Sequences must all be the same length

这是预期的结果 - FASTA文件不是对齐序列的集合。如果你想把它作为对齐加载,首先运行像MUSCLE,Clustal Omega等对齐工具。但是,看了文件和长度范围后,我怀疑这个例子是否合理:

>>> from Bio import SeqIO
>>> lengths = set(len(record) for record in SeqIO.parse("A_prot.fasta", "fasta"))
>>> lengths
set([17, 19, 26, 50, 51, 53, 59, 65, 66, 71, 72, 73, 74, ..., 364, 365])

答案 1 :(得分:0)

peterjc提出了一个很好的观点,AlignIO采用了必须具有相同长度的对齐序列。如果您想要读取fata containsig未对齐序列,可以使用SeqIO,如下所示:

>>> from Bio import SeqIO
>>> handle = open("A_prot.fasta", "rU")
>>> print handle
<open file 'A_prot.fasta', mode 'rU' at 0x13fc1d8>
>>> 

要将序列读入字典,您可以使用以下内容:

>>> record_dict = SeqIO.to_dict(SeqIO.parse(handle, "fasta"))
>>> print len(record_dict)
2186 # Fasta file contains 2186 entries
>>>  

在这种情况下,记录ID成为关键。要访问与特定密钥使用相关的信息,请使用:

>>> record_dict['HLA:HLA00001']
SeqRecord(seq=Seq('MAVMAPRTLLLLLSGALALTQTWAGSHSMRYFFTSVSRPGRGEPRFIAVGYVDD...CKV', SingleLetterAlphabet()), id='HLA:HLA00001', name='HLA:HLA00001', description='HLA:HLA00001 A*01:01:01:01 365 bp', dbxrefs=[])
>>> 

有关更多信息,请参阅AlignIOSeqIO文档