Chapter 6   Appendix: Useful stuff about Python
If you haven't spent a lot of time programming in python, many
questions and problems that come up in using Biopython are often
related to python itself. This section tries to present some ideas and 
code that come up often (at least for us!) while using the Biopython
libraries. If you have any suggestions for useful pointers that could
go here, please contribute!
6.1   What the heck in a handle?
Handles are mentioned quite frequently throughout this documentation,
and are also fairly confusing (at least to me!). Basically, you can
think of a handle as being a ``wrapper'' around text information.
Handles provide (at least) two benefits over plain text information:
- 
  They provide a standard way to deal with information stored in 
 different ways. The text information can be in a file, or in a
 string stored in memory, or at some remote website, but the handle
 provides a common way of dealing with information in all of these
 formats. 
 
 -  They allow text information to be read incrementally, instead
 of all at once. This is really important when you are dealing with
 huge text files which would use up all of your memory if you had to
 load them all.
 
Handles can deal with text information that is being read (i. e. reading 
from a file) or written (i. e. writing information to a file). In the
case of a ``read'' handle, commonly used functions are read(),
which reads the entire text information from the handle, and
readline(), which reads information one line at a time. For
``write'' handles, the function write() is regularly used.
The most common usage for handles is reading information from a file,
which is done using the built-in python function open:
>>> handle = open("m_cold.fasta", "r")
>>> handle.readline()
">gi|8332116|gb|BE037100.1|BE037100 MP14H09 MP Mesembryanthemum crystallinum cDNA 5' similar to cold acclimation protein, mRNA sequence\n"
Handles are regularly used in Biopython for passing information to parsers.
6.1.1   Creating a handle from a string
One useful thing is to be able to turn information contained in a
string into a handle. The following example shows how to do this using 
cStringIO from the Python standard library:
>>> my_info = 'A string\n with multiple lines.'
>>> print my_info
A string
 with multiple lines.
>>> import cStringIO
>>> my_info_handle = cStringIO.StringIO(my_info)
>>> first_line = my_info_handle.readline()
>>> print first_line
A string
>>> second_line = my_info_handle.readline()
>>> print second_line
 with multiple lines.