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.
Your script is named copy.py
this is replacing the standard library python copy
module and thus giving the non-intuitive AttributeError
. Re-name your script to something else, for example my_copy.py
, and it will work.
This code snippet demonstrates that importing SeqIO
imports copy
:
>>> import sys
>>> sys.modules['copy']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'copy'
>>> from Bio import SeqIO
>>> sys.modules['copy']
<module 'copy' from '/usr/lib64/python3.6/copy.py'>