2011-01-13 8 views

Odpowiedz

52

StringIO obiektów wdrożenia API pliku, dzięki czemu można uzyskać ich rozmiar w dokładnie taki sam sposób, jak można z file obiekt: szukaj do końca i zobacz, gdzie idzie.

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

Jak wspomina Kimvais, można również użyć len, ale należy pamiętać, że jest to specyficzne dla obiektów StringIO. Ogólnie, głównym powodem używania tych obiektów jest użycie ich z kodem, który oczekuje obiektu podobnego do pliku. Kiedy masz do czynienia z typowym obiektem podobnym do pliku, zazwyczaj chcesz zrobić powyższe, aby uzyskać jego długość, ponieważ działa to z dowolnym obiektem podobnym do pliku.

+1

Polecam przechowywanie wyniku 'pos = s.tell() 'i' s.seek (pos) 'po sprawdzeniu tej wartości, w przypadku gdy pozycja pliku jest ważna dla każdego z twoich klientów. – ThorSummoner

15

Sprawdzając len atrybut i używając getValue() metoda

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

Chciałem zadzwonić do 'tell()', ale twoje jest o wiele bardziej oczywiste. – Omnifarious

+1

Nie mam tego. Zamiast tego mam to: ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__' , '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'next', 'read', ' readline ',' readlines ',' reset ',' seek ',' tell ',' truncate '] – TIMEX

+3

Zgaduję, że używasz 'cStringIO', a nie' StringIO', z którego powodu 't know - nie ma właściwości 'len', która pasowałaby do' StringIO'. Domyślam się, że własność 'len' jest właściwie nieudokumentowana, co również jest trochę dziwne. –

Powiązane problemy