如何使用Python流对象?
我有一个函数,它接收一个打开的文件对象 file
,然后像这样往里面写数据:
def Write(self, file):
file.write("Data")
现在我想测试这个函数,我觉得用某种流来测试会很不错,这种流不需要把数据写入文件。可是我找不到适合Python2.7的类,除了StringIO类。问题是,在Python2.7中,这个类在写入时需要一个unicode字符串。也就是说,我不能用 StringIO
类来测试我的 Write
函数。
为了绕过这个问题,我创建了一个小的虚拟类
class MyStream(object):
S = property(lambda self: self._S)
def __init__(self):
self._S = ""
def write(self, s):
self._S += s
现在我可以成功地测试我的 Write
函数了。
我的问题是:
有没有什么原生的Python类可以实现同样的功能?
提前感谢任何建议!
祝好,Woltan
1 个回答
1
根据io
模块的说明:
这个模块主要是为Python 3.x设计的,所以在这份文档中提到的“字节”(bytes)指的是字符串类型(str),而“文本”(text)指的是Unicode类型。此外,这两种类型在io的接口中是不能互换的。
也就是说,如果你使用的是移植过来的Python 3的IO库,你就必须使用Unicode。不过,原来的StringIO
类在Python 2.7中依然存在,它把字节(Python 2的字符串)当作文本来处理并接受它们,但这个类不在移植过来的io
模块里。相反,它有自己独立的模块,也叫StringIO
。