Gle*_*ard 66

StringIO对象实现文件API,因此您可以使用与file对象完全相同的方式获取它们的大小:寻找最终并查看它的去向.

from StringIO import StringIO
import os
s = StringIO()
s.write("abc")
pos = s.tell()
s.seek(0, os.SEEK_END)
print s.tell()
s.seek(pos)
Run Code Online (Sandbox Code Playgroud)

正如Kimvais所提到的,你也可以使用len,但请注意,这是StringIO对象特有的.通常,首先使用这些对象的一个​​主要原因是将它们与需要类文件对象的代码一起使用.当您处理类似通用文件的对象时,通常需要执行上述操作以获取其长度,因为它适用于任何类文件对象.

  • 我建议在检查此值后存储pos = s.tell()和s.seek(pos)的结果,以防文件位置对您的任何使用者都很重要。 (3认同)

Kim*_*ais 21

通过检查len属性并使用getvalue()方法

Type "help", "copyright", "credits" or "license" for more information.
>>> import StringIO
>>> s = StringIO.StringIO()
>>> s.write("foobar")
>>> s.len
6
>>> s.write(" and spameggs")
>>> s.len
19
>>> s.getvalue()
'foobar and spameggs'
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,在Python3中删除了`len`,因此您无法在Python3中使用您的解决方案. (13认同)
  • 我猜你实际上是在使用`cStringIO`而不是`StringIO`,由于什么原因我不知道 - 没有`len`属性来匹配`StringIO`.我猜`len`属性实际上没有文档,这也有点奇怪. (4认同)
  • 在Python3上,请注意`StringIO.write()`返回写入的字符数,因此您可以跟踪它们而无需检查长度... (4认同)