Thank you for your attention. I will try that. For me it's only works with the file2 ("keywlist2.txt" ).
Hey guys I found a bug in one of the codes in the cookbook and tutorials from Biopython. Tried this one and got a KeyError: 'ID'.
from Bio.SwissProt import KeyWList
handle = open("keywlist.txt")
records = KeyWList.parse(handle)
for record in records:
print(record[’ID’])
print(record[’DE’])
Do you have any ideia or someone else find this problem?
Thanks
Paulo
The version of the tutorial/cookbook : Last Update { 17 December 2014 (Biopython 1.65)
1 answer
I have added formatting to your post for clarity. Please use the 101010 button to make code more readable.
The code on the cookbook works without issue for me. It looks like you are using a weird ' character: ’. That looks to be an apostrophe rather than a single quotation mark. Ensure you're using the right character, and try again would be my suggestion.
Given their example input file (stored in the current working directory as keywlist.txt):
ID 2Fe-2S.
AC KW-0001
DE Protein which contains at least one 2Fe-2S iron-sulfur cluster: 2 iron
DE atoms complexed to 2 inorganic sulfides and 4 sulfur atoms of
DE cysteines from the protein.
SY Fe2S2; [2Fe-2S] cluster; [Fe2S2] cluster; Fe2/S2 (inorganic) cluster;
SY Di-mu-sulfido-diiron; 2 iron, 2 sulfur cluster binding.
GO GO:0051537; 2 iron, 2 sulfur cluster binding
HI Ligand: Iron; Iron-sulfur; 2Fe-2S.
HI Ligand: Metal-binding; 2Fe-2S.
CA Ligand.
//
ID 3D-structure.
AC KW-0002
DE Protein, or part of a protein, whose three-dimensional structure has
DE been resolved experimentally (for example by X-ray crystallography or
DE NMR spectroscopy) and whose coordinates are available in the PDB
DE database. Can also be used for theoretical models.
HI Technical term: 3D-structure.
CA Technical term.
//
This code snippet returns the expected result.
from Bio.SwissProt import KeyWList
handle = open("keywlist.txt")
records = KeyWList.parse(handle)
for record in records:
print(record["ID"])
2Fe-2S.
3D-structure.
Yes, you need to have a file in the directory which corresponds to the name given in the open() call. It’s not magically creating a file, you actually need one to parse, and you need to change what’s inside open() to match accordingly.
Copy and paste my code exactly, and see if that works.
@ jrj.healey
sir I have all the files in the same places as my notebooks and I told you that the code works only with one (keywlist2.txt) of the files that I downloaded from Biopython github.
It also doesn't work when I downloaded from the SwissProt site.
I also found that in the MEME files there are some troubles for works with some codes.
But maybe because environment incompatibilities or some else. Or I am dumb :)
But I appreciate you help.
Thank you
I don't know that this would be a 'bug' per se. The KeyError is to be expected since the 2nd entry in keywlist.txt in that example, does not have an "ID" field, hence the error.
See here for instance:
from Bio.SwissProt import KeyWList
# File 1
print("Working on file 1...")
print("====================")
handle = open("./keywlist.txt")
records = KeyWList.parse(handle)
for i, record in enumerate(records, start = 1):
try:
print("Record {} -> ID = {}".format(i, record["ID"]))
except KeyError:
print("ERROR: ID issue with File 1, Record {} -> {}...".format(i, str(record)[0:20]))
try:
print("Record {} -> DE = {}".format(i, record["DE"]))
except KeyError:
print("ERROR: DE issue with File 1, Record {} -> {}".format(i, str(record)))
handle.close()
# File 2
print("\nWorking on file 2...")
print("====================")
handle2 = open("./keywlist2.txt")
records2 = KeyWList.parse(handle2)
for i, record in enumerate(records2, start = 1):
try:
print("Record {} -> ID = {}".format(i, record["ID"]))
except KeyError:
print("ERROR: ID issue with File 2, Record {} -> {}...".format(i, str(record)[0:20]))
try:
print("Record {} -> DE = {}".format(i, record["DE"]))
except KeyError:
print("ERROR: DE issue with File 2, Record {} -> {}".format(i, str(record)[0:20]))
handle.close()
Yields:
Working on file 1...
====================
Record 1 -> ID = 2Fe-2S.
Record 1 -> DE = Protein which contains at least one 2Fe-2S iron-sulfur cluster: 2 iron atoms complexed to 2 inorganic sulfides and 4 sulfur atoms of cysteines from the protein.
ERROR: ID issue with File 1, Record 2 -> {'SY': '', 'DE': 'Ke...
Record 2 -> DE = Keywords assigned to proteins due to their particular molecular function.
Record 3 -> ID = Zymogen.
Record 3 -> DE = The enzymatically inactive precursor of mostly proteolytic enzymes.
Working on file 2...
====================
Record 1 -> ID = 2Fe-2S.
Record 1 -> DE = Protein which contains at least one 2Fe-2S iron-sulfur cluster: 2 iron atoms complexed to 2 inorganic sulfides and 4 sulfur atoms of cysteines from the protein.
Record 2 -> ID = 3D-structure.
Record 2 -> DE = Protein, or part of a protein, whose three-dimensional structure has been resolved experimentally (for example by X-ray crystallography or NMR spectroscopy) and whose coordinates are available in the PDB database. Can also be used for theoretical models.
Record 3 -> ID = 3Fe-4S.
Record 3 -> DE = Protein which contains at least one 3Fe-4S iron-sulfur cluster: 3 iron atoms complexed to 4 inorganic sulfides and 3 sulfur atoms of cysteines from the protein. In a number of iron-sulfur proteins, the 4Fe-4S cluster can be reversibly converted by oxidation and loss of one iron ion to a 3Fe-4S cluster.
So, as expected, since there is no ID field for entry 2 (it's a Identifier (category) entry, not an Identifier (keyword) entry according to the file), there is an 'error' with that entry in the loop (see the line that begins ERROR:....
I'm not very familiar with this part of BioPython though, so one of the devs would have to weigh in as to whether this is expected behaviour for the parser or not (and whether the documentation should be modified accordingly)
Got it. Because with an downloaded file from the site it worked for many records until I got that key error. Thank you for your time and patience. I am expecting that every file are perfect, but they are not. :)
If this has solved your issue, please go ahead and accept the answer via the check mark next to the post to provide closure to the thread.
Log in to answer this question.
still getting same error! 8(