--- /dev/null
+# Copyright 2006 by Peter Cock. All rights reserved.
+#
+# This code is part of the Biopython distribution and governed by its
+# license. Please see the LICENSE file that should have been included
+# as part of this package.
+
+"""Bio.SeqIO support for the "swiss" (aka SwissProt/UniProt) file format.
+
+You are expected to use this module via the Bio.SeqIO functions.
+See also the Bio.SwissProt module which offers more than just accessing
+the sequences as SeqRecord objects."""
+
+from Bio.SwissProt import SProt
+import cStringIO
+
+#This is a generator function!
+def SwissIterator(handle) :
+ """Breaks up a Swiss-Prot/UniProt file into SeqRecord objects.
+
+ Every section from the ID line to the terminating // becomes
+ a single SeqRecord with associated annotation and features.
+
+ This parser is for the flat file "swiss" format as used by:
+ * Swiss-Prot aka SwissProt
+ * TrEMBL
+ * UniProtKB aka UniProt Knowledgebase
+
+ It does NOT read their new XML file format.
+ http://www.expasy.org/sprot/
+
+ For consistency with BioPerl and EMBOSS we call this the "swiss"
+ format.
+ """
+ parser = SProt.SequenceParser()
+ lines = []
+ for line in handle:
+ lines.append(line)
+ if line[:2]=='//':
+ handle = cStringIO.StringIO("".join(lines))
+ record = parser.parse(handle)
+ lines = []
+ yield record
+ #If there are more lines, it could only be a partial record.
+ #Should we try and parse them anyway?
+
+
+if __name__ == "__main__" :
+ print "Quick self test..."
+
+ example_filename = "../../Tests/SwissProt/sp008"
+
+ import os
+ if not os.path.isfile(example_filename):
+ print "Missing test file %s" % example_filename
+ else :
+ #Try parsing it!
+ handle = open(example_filename)
+ records = SwissIterator(handle)
+ for record in records:
+ print record.name
+ print record.id
+ print record.annotations['keywords']
+ print repr(record.annotations['organism'])
+ print record.seq.tostring()[:20] + "..."
+ handle.close()