Python 使用StringIO对象保存uu.encode/uu.decode数据

Python 使用StringIO对象保存uu.encode/uu.decode数据,python,encoding,Python,Encoding,我想做以下工作: 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 上述代码有效。但是,如果我将上一步实现为对象中的属性: @

我想做以下工作:

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.\u内容
是空的(
None
,确切地说)。有什么想法吗?

self.\u content
content.setter
方法写入后,会在末尾保留“当前点”。您可能希望在该方法的末尾添加
self.\u content.seek(0)
,以便接下来可以从开头读取该伪文件(从结尾开始读取时将返回“nothing more”,非常正确,因为它确实从结尾开始,这可能会给您留下“空”的印象;-).

打开('value','rb')尝试以只读二进制模式打开磁盘上名为
“value”
的文件,对吗?我不确定,看看你的代码,那个文件从哪里来。@Brandon对不起,你是对的,它应该是
value
(没有引号),它是用文件名(字符串)传递给方法的参数。谢谢你,Alex。请让我试试这个。