78

使用Python2.7版本。下面是我的示例代码。

import StringIO
import sys

buff = StringIO.StringIO()
buff.write("hello")
print buff.read()

在上面的程序中,read() 没有返回任何内容,而 getvalue() 则返回“你好”。谁能帮我解决这个问题?我需要 read() 因为我的以下代码涉及读取“n”个字节。

4

2 回答 2

107

您需要将缓冲区位置重置为开头。你可以这样做buff.seek(0)

每次读取或写入缓冲区时,位置都会提前一位。假设您从一个空缓冲区开始。

缓冲区值为"",缓冲区 pos 为0。你做buff.write("hello")。显然缓冲区值是 now hello。然而,缓冲位置现在是5。当您调用时read(),位置 5 之后没有任何内容可读取!所以它返回一个空字符串。

于 2012-04-22T06:00:35.503 回答
26
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'

或者

In [5]: out = StringIO.StringIO()

In [6]: out.write('use write')

In [8]: out.seek(0)

In [9]: out.read()
Out[9]: 'use write'
于 2015-07-28T23:55:52.743 回答