2010-06-28 38 views
2

我想做到以下幾點:一個StringIO對象舉辦uu.encode/uu.decode數據

import StringIO, uu 
my_data = StringIO.StringIO() # this is a file-like object 
uu.encode(in_file, my_data) 
# do stuff with my data (send over network) 
uu.decode(my_data, out_file) # here I finally write to disk 

上面的代碼工作。不過,如果我實現一個對象上一步中作爲一個屬性:

@property 
def content(self): 
out = StringIO.StringIO() 
uu.decode(self._content, out) 
return out.getvalue() 
@content.setter 
def content(self, value): 
self._content = StringIO.StringIO() 
with open('value', 'rb') as stream: 
    uu.encode(stream, self._content) 

但是當我那樣做,self._content是空的(None,要準確)。有任何想法嗎?

+0

'open('value','rb')'嘗試在只讀的二進制模式下打開名爲'「value」'的磁盤上的文件,對吧?我不確定,看看你的代碼,那個文件來自哪裏。 – 2010-06-28 23:01:38

+0

@Brandon抱歉,你是對的,它應該讀取'value'(不含引號),它是一個傳遞給文件名(字符串)的方法的參數。 – Escualo 2010-06-29 04:23:01

回答

1

self._contentcontent.setter方法寫入之後,剩下「當前點」在其結尾。您可能想要在該方法結尾處添加self._content.seek(0),以便您可以接着讀取開始(從結尾開始讀取時將從「end」開始讀取,只會返回「沒有更多」,相當正確,因爲它始於最終,這可能是給你留下了「空」的印象;-)。

+0

謝謝Alex。請讓我試驗一下。 – Escualo 2010-06-29 04:23:31

相關問題