使用Python2.7版本。下面是我的示例代码。
import StringIO
import sys
buff = StringIO.StringIO()
buff.write("hello")
print buff.read()
在上面的程序中,read()不返回任何内容,而getvalue()则返回“你好”。谁能帮我解决这个问题?我需要read(),因为我的以下代码涉及读取“ n”个字节。
使用Python2.7版本。下面是我的示例代码。
import StringIO
import sys
buff = StringIO.StringIO()
buff.write("hello")
print buff.read()
在上面的程序中,read()不返回任何内容,而getvalue()则返回“你好”。谁能帮我解决这个问题?我需要read(),因为我的以下代码涉及读取“ n”个字节。
dir(StringIO.StringIO)
。
read()
Answers:
您需要将缓冲区位置重置为开始位置。您可以通过执行此操作buff.seek(0)
。
每次读取或写入缓冲区时,该位置都会前移一个。假设您从一个空的缓冲区开始。
缓冲区值为""
,缓冲区pos为0
。你做buff.write("hello")
。显然,缓冲区的值为now 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'
read()
在stringIO中