This is a test version of Biostars. For the public version, visit https://www.biostars.org.
AttributeError: module 'Bio.SeqIO' has no attribute 'parse'

The codes which import Biopython and parse the files have worked on my laptop. Now I have a very big file that I can only parse it on another computer which also have installed python and Biopython. But on that computer, it gives me error message. I have uninstalled and reinstalled the latest python and biopython. The problem is still there.

The entire code is:

from Bio import SeqIO

with open('/Users/yuewang/work/18s_tree/aligned_fungi_rna.fasta', 'w') as output:
    output.write('')

with open('/Users/yuewang/work/18s_tree/SILVA_132_SSURef_tax_silva_full_align_trunc.fasta') as fastafile:
    record_iterator = SeqIO.parse(fastafile, 'fasta')

    fungi = 'Eukaryota;Opisthokonta;Nucletmycea;Fungi;'
        for record in record_iterator:
            if fungi in record.id:
                with open('/Users/yuewang/work/18s_tree/aligned_fungi_rna.fasta', 'a') as output:
                    output.write(record.format('fasta'))

Error message:

Traceback (most recent call last):
  File "copy.py", line 1, in <module>
    from Bio import SeqIO
  File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/Bio/SeqIO/__init__.py", line 391, in <module>
    from . import UniprotIO
  File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/Bio/SeqIO/UniprotIO.py", line 34, in <module>
    from xml.etree import cElementTree as ElementTree
  File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/xml/etree/cElementTree.py", line 3, in <module>
    from xml.etree.ElementTree import *
  File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/xml/etree/ElementTree.py", line 1660, in <module>
    from _elementtree import *
  File "/Users/yuewang/work/18s_tree/copy.py", line 7, in <module>
    record_iterator = SeqIO.parse(fastafile, 'fasta')
AttributeError: module 'Bio.SeqIO' has no attribute 'parse'

Please let me know if my question is not clear enough.

biopython

I dont think this is likely to solve the issue, but try it first (I think there’s something messed up in your install still).

You do not need to use the open() construct when using SeqIO, it does that for you, and also you open your output file twice needlessly.

Try refactoring this code to:

from Bio import SeqIO

record_iterator = SeqIO.parse(‘/path/to/fastafile.fa’, ‘fasta’)
with open(‘/path/to/output.fa’, ‘w’) as output:
    for record in record_iterator:
        if ‘Eukaryota;Opisthokonta;Nucletmycea;Fungi’ in record.id:
            output.write(record.format(‘fasta’)

Thanks Healey. Although it doesn't solve the issue, it does make the script better. I also posted my question on stackoverflow yesterday and it solved with the answer.

Interesting. I’ve been caught out by that before.

As a general rule, it’s a bad idea to name anything of your own the same as a python component. This means you’ll need to try and avoid names like copy, return, str which it might be tempting to name a script or a variable after etc.

0 answers

No answers yet.

Log in to answer this question.