2011-01-13 11 views

Respuesta

52

StringIO objetos implementar la API de archivos, para que pueda obtener su tamaño exactamente de la misma manera que puedas con una file objeto: busca hasta el final y mira a dónde va.

from StringIO import StringIO 
import os 
s = StringIO() 
s.write("abc") 
s.seek(0, os.SEEK_END) 
print s.tell() 

Como se menciona Kimvais, también se puede utilizar el len, pero tenga en cuenta que eso es específica a los objetos StringIO. En general, una razón importante para usar estos objetos en primer lugar es usarlos con código que espera un objeto similar a un archivo. Cuando se trata de un objeto genérico similar a un archivo, generalmente desea hacer lo anterior para obtener su longitud, ya que funciona con cualquier objeto similar a un archivo.

+1

Recomiendo almacenar el resultado de 'pos = s.tell() 'y' s.seek (pos) 'después de verificar este valor, en el caso de que la posición del archivo sea importante para cualquiera de sus consumidores. – ThorSummoner

15

Al marcar la len atributo y el uso de la getValue () método

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' 
+0

Iba a llamar a 'tell()', pero el suyo es mucho más obviamente correcto. – Omnifarious

+1

No tengo eso. En cambio, tengo esto: ['__class__', '__delattr__', '__crea__', '__format__', '__getattribute__', '__hash__', '__init__', '__rit__', '__new__', '__reduce__', '__reduce_ex__' , '__sepr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'next', 'read', ' readline ',' readlines ',' reset ',' seek ',' tell ',' truncate '] – TIMEX

+3

Supongo que realmente está usando 'cStringIO' y no' StringIO', que - por qué motivo 't sabe - no tiene una propiedad 'len' para que coincida con' StringIO'. Supongo que la propiedad 'len' no está documentada, lo que también es un poco extraño. –

Cuestiones relacionadas