Previous Page
Next Page

10.5. The StringIO and cStringIO Modules

You can implement file-like objects by writing Python classes that supply the methods you need. If all you want is for data to reside in memory, rather than on a file as seen by the operating system, use modules StringIO or cStringIO. The two modules are almost identical: each supplies a factory that is callable to create in-memory file-like objects. The difference between them is that objects created by module StringIO are instances of class StringIO.StringIO. You may inherit from this class to create your own customized file-like objects, overriding the methods that you need to specialize, and you can perform both input and output on objects of this class. Objects created by module cStringIO, on the other hand, are instances of either of two special-purpose types (one just for input, the other just for output), not of a class. Performance is better when you can use cStringIO, but inheritance is not supported, and neither is doing both input and output on the same object. Furthermore, cStringIO does not support Unicode.

Each module supplies a factory function StringIO that returns a file-like object fl.



Creates and returns an in-memory file-like object fl, with all the methods and attributes of a built-in file object. The data contents of fl are initialized to be a copy of argument s, which must be a plain string for the StringIO factory function in cStringIO, though it can be a plain or Unicode string for the function in StringIO. When s is present, cStringIO.StringIO produces an object suitable for reading from; when s is not present, cStringIO.StringIO produces an object suitable for writing to.

Besides all methods and attributes of built-in file objects (as covered in "Attributes and Methods of File Objects" on page 218), fl supplies one supplementary method, getvalue.


fl. getvalue( )

Returns the current data contents of fl as a string. You cannot call fl.getvalue after you call fl.close: close frees the buffer that fl internally keeps, and getvalue needs to access the buffer to yield its result.

Previous Page
Next Page