Using Python2.7 version. Below is my sample code.
import StringIO
import sys
buff = StringIO.StringIO()
buff.write("hello")
print buff.read()
in the above program, read() returns me nothing where as getvalue() returns me "hello". Can anyone help me out in fixing the issue? I need read() because my following code involves reading "n" bytes.
You need to reset the buffer position to the beginning. You can do this by doing buff.seek(0)
.
Every time you read or write to the buffer, the position is advanced by one. Say you start with an empty buffer.
The buffer value is ""
, the buffer pos is 0
. You do buff.write("hello")
. Obviously the buffer value is now hello
. The buffer position, however, is now 5
. When you call read()
, there is nothing past position 5 to read! So it returns an empty string.
In [38]: out_2 = StringIO.StringIO('not use write') # be initialized to an existing string by passing the string to the constructor
In [39]: out_2.getvalue()
Out[39]: 'not use write'
In [40]: out_2.read()
Out[40]: 'not use write'
or
In [5]: out = StringIO.StringIO()
In [6]: out.write('use write')
In [8]: out.seek(0)
In [9]: out.read()
Out[9]: 'use write'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With