# Why SeqIO.parse method isn't working?

I am trying to follow the tutorial from from the Biopython website here and I am right at the beginning (2.4.1), where I am trying a Simple FASTA parsing example which is

from Bio import SeqIO
for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"):
print(seq_record.id)
print(repr(seq_record.seq))
print(len(seq_record))


For an unknown reason, I get the following error:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-19-c64128d7dcfd> in <module>
1 from Bio import SeqIO
----> 2 for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"):
3     print(seq_record.id)
4     print(repr(seq_record.seq))
5     print(len(seq_record))

~\Anaconda3\lib\site-packages\Bio\SeqIO\__init__.py in parse(handle, format, alphabet)
605     iterator_generator = _FormatToIterator.get(format)
606     if iterator_generator:
--> 607         return iterator_generator(handle)
608     if format in AlignIO._FormatToIterator:
609         # Use Bio.AlignIO to read in the alignments

~\Anaconda3\lib\site-packages\Bio\SeqIO\FastaIO.py in __init__(self, source, alphabet, title2ids)
181             raise ValueError("The alphabet argument is no longer supported")
182         self.title2ids = title2ids
--> 183         super().__init__(source, mode="t", fmt="Fasta")
184
185     def parse(self, handle):

~\Anaconda3\lib\site-packages\Bio\SeqIO\Interfaces.py in __init__(self, source, alphabet, mode, fmt)
45             raise ValueError("The alphabet argument is no longer supported")
46         try:
---> 47             self.stream = open(source, "r" + mode)
48             self.should_close_stream = True
49         except TypeError:  # not a path, assume we received a stream

FileNotFoundError: [Errno 2] No such file or directory: 'ls_orchid.fasta'


I am using a Jupyter Notebook.

• There's something wrong with your copy of raw.githubusercontent.com/biopython/biopython/master/Doc/… Nov 10 '20 at 23:15
• Is there any way not to download a .fasta file every time but say scrape it directly from pubmed genome? This string ncbi.nlm.nih.gov/nuccore/FJ211590.1?report=fasta isn't accepted as a valid argument. Thank you. Nov 11 '20 at 15:05
• Just download the file Nov 11 '20 at 16:33
• Thanks, this means there's no other way? Nov 11 '20 at 16:54
• If you wanted to program in a cache you could, but that’sd be excessive IMO. Nov 11 '20 at 16:55

Personally I think its late and we're all tired.

"FileNotFoundError: [Errno 2] No such file or directory: 'ls_orchid.fasta'"

The traceback is pointing to line 2, the SeqIO as you point out.

In my opinion, the script should be in the same directory as the fasta file. You know how to identify the path in bash (pwd or echo \$PWD), although you must be using Windows (Anaconda has \ rather than /). Alternatively the file names has a typo. You know the

for seq_record in SeqIO.parse("~\path\ls_orchid.fasta", "fasta"): # where path is the dir(s) leading to ls_orchid.fasta, but obviously use / if its Linux.


I would assume you can alternatively dump the .ipynb file in the location where the fasta file is.

As personal choice I prefer a formal IDE such as 'Visual Studio Code' or "PyCharm". In my personal opinion, I am aware some will disagree, Jupyter notebook good is for running code on a remote commercial server for data science work. However, the traceback - which you clearly have activated - looks good. I can see that you're Anaconda3 installation looks good, you must be using Windows (which I've never worked with) and you're running Jupiter from Anaconda3 ... so cool.

• Thanks, Michael, these are my first steps with biopython - thought it would work ok with win10 jupyter nb, and yeah checked the path - it was wrong so now everything's fine. Agree 100% that Linux is better. Nov 11 '20 at 14:56