2011-01-13 32 views

Trả lời

52

StringIO đối tượng thực hiện các tập tin API, vì vậy bạn có thể nhận được kích thước của chúng chính xác theo cùng một cách như bạn có thể với một file đối tượng: tìm cách kết thúc và xem nó đi đâu.

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

Như Kimvais đề cập, bạn cũng có thể sử dụng len, nhưng lưu ý rằng điều đó cụ thể cho đối tượng StringIO. Nói chung, một lý do chính để sử dụng các đối tượng này ở nơi đầu tiên là sử dụng chúng với mã mong đợi một đối tượng giống như tệp. Khi bạn đang xử lý một đối tượng giống như tệp chung, bạn thường muốn thực hiện ở trên để có độ dài của nó, vì nó hoạt động với bất kỳ đối tượng nào giống như tệp.

+1

Tôi khuyên bạn nên lưu trữ kết quả của 'pos = s.tell() 'và' s.seek (pos) 'sau khi kiểm tra giá trị này, trong trường hợp vị trí tệp quan trọng đối với bất kỳ người tiêu dùng nào của bạn. – ThorSummoner

15

Bằng cách kiểm tra các len thuộc tính và sử dụng getValue() phương pháp

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

Tôi sẽ gọi 'tell()', nhưng bạn rõ ràng là chính xác hơn nhiều. – Omnifarious

+1

Tôi không có. Thay vào đó, tôi có điều này: ['__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

Tôi đoán bạn đang thực sự sử dụng 'cStringIO' chứ không phải' StringIO', cái nào - vì lý do gì tôi don Không biết - không có thuộc tính 'len' để khớp' StringIO'. Tôi đoán tài sản 'len' thực sự không có giấy tờ, điều này cũng hơi lạ. –

Các vấn đề liên quan