在 python 中使用 StringIO 的 read()获取数据失败

使用 Python 2.7版本。

import StringIO
import sys


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

在上面的程序中,read ()不返回任何值,而 getvalue ()返回“ hello”。有人能帮我解决这个问题吗?我需要 read () ,因为下面的代码涉及读取“ n”字节。

27910 次浏览

您需要将缓冲区位置重置为开始位置。

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

缓冲区值是 "",缓冲区 pos 是 0。 你做 buff.write("hello")。显然,缓冲区值现在是 hello。然而,缓冲区位置现在是 5。当你调用 read(),没有什么过去的位置5读!所以它返回一个空字符串。

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'