如何使用Python流对象?

时间:2011-05-31 14:32:36

标签: python stream io python-2.7

我有一个函数,它接受一个打开的文件对象file并像这样写入数据:

def Write(self, file):
    file.write("Data")

现在我想测试一下这个函数,我认为用某种不将数据写入文件的流来做这件事是很好的。除了StringIO类之外,我找不到能完成这项工作的Python2.7类。但是,在Python2.7中,此类需要write函数中的unicode字符串。 (file.write(u"Data"))所以我无法使用Write类测试StringIO函数 在我的解决方法中,我创建了一个小型的虚拟课程

class MyStream(object):
    S = property(lambda self: self._S)

    def __init__(self):
        self._S = ""

    def write(self, s):
        self._S += s

我现在可以成功测试我的Write功能。

我的问题:
是否有一个原生的python类可以做同样的伎俩? Thx提前提出任何建议 关心沃尔坦

1 个答案:

答案 0 :(得分:1)

正如io所述的文件:

  

由于此模块主要是为Python 3.x设计的,因此您必须注意本文档中“bytes”的所有用法都是指str类型(其中bytes是别名),以及所有使用“ text“指的是unicode类型。此外,这两种类型在io API中不可互换。

即。如果您使用backported Python 3 IO库,则必须使用unicode。但是,原始的StringIO类 - 它考虑了字节(Python 2字符串)文本并接受它们 - 仍然存在于Python 2.7中,它只是不在反向移植的io中。相反,它有自己的模块,也称为StringIO