summaryrefslogtreecommitdiffstats
path: root/Doc/lib/libstringio.tex
blob: 24312518f37279d38c235798798c1d61a69ef3d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
\section{\module{StringIO} ---
         Read and write strings as files}

\declaremodule{standard}{StringIO}
\modulesynopsis{Read and write strings as if they were files.}


This module implements a file-like class, \class{StringIO},
that reads and writes a string buffer (also known as \emph{memory
files}).  See the description of file objects for operations (section
\ref{bltin-file-objects}).

\begin{classdesc}{StringIO}{\optional{buffer}}
When a \class{StringIO} object is created, it can be initialized
to an existing string by passing the string to the constructor.
If no string is given, the \class{StringIO} will start empty.
In both cases, the initial file position starts at zero.

The \class{StringIO} object can accept either Unicode or 8-bit
strings, but mixing the two may take some care.  If both are used,
8-bit strings that cannot be interpreted as 7-bit \ASCII{} (that
use the 8th bit) will cause a \exception{UnicodeError} to be raised
when \method{getvalue()} is called.
\end{classdesc}

The following methods of \class{StringIO} objects require special
mention:

\begin{methoddesc}{getvalue}{}
Retrieve the entire contents of the ``file'' at any time before the
\class{StringIO} object's \method{close()} method is called.  See the
note above for information about mixing Unicode and 8-bit strings;
such mixing can cause this method to raise \exception{UnicodeError}.
\end{methoddesc}

\begin{methoddesc}{close}{}
Free the memory buffer.
\end{methoddesc}

Example usage:

\begin{verbatim}
import StringIO

output = StringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'

# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()

# Close object and discard memory buffer -- 
# .getvalue() will now raise an exception.
output.close()
\end{verbatim}


\section{\module{cStringIO} ---
         Faster version of \module{StringIO}}

\declaremodule{builtin}{cStringIO}
\modulesynopsis{Faster version of \module{StringIO}, but not
                subclassable.}
\moduleauthor{Jim Fulton}{jim@zope.com}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}

The module \module{cStringIO} provides an interface similar to that of
the \refmodule{StringIO} module.  Heavy use of \class{StringIO.StringIO}
objects can be made more efficient by using the function
\function{StringIO()} from this module instead.

Since this module provides a factory function which returns objects of
built-in types, there's no way to build your own version using
subclassing.  Use the original \refmodule{StringIO} module in that case.

Unlike the memory files implemented by the \refmodule{StringIO}
module, those provided by this module are not able to accept Unicode
strings that cannot be encoded as plain \ASCII{} strings.

Another difference from the \refmodule{StringIO} module is that calling
\function{StringIO()} with a string parameter creates a read-only object.
Unlike an object created without a string parameter, it does not have
write methods.  These objects are not generally visible.  They turn up in
tracebacks as \class{StringI} and \class{StringO}.

The following data objects are provided as well:


\begin{datadesc}{InputType}
  The type object of the objects created by calling
  \function{StringIO} with a string parameter.
\end{datadesc}

\begin{datadesc}{OutputType}
  The type object of the objects returned by calling
  \function{StringIO} with no parameters.
\end{datadesc}


There is a C API to the module as well; refer to the module source for 
more information.

Example usage:

\begin{verbatim}
import cStringIO

output = cStringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'

# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()

# Close object and discard memory buffer -- 
# .getvalue() will now raise an exception.
output.close()
\end{verbatim}