如何使用Python流对象?

2 投票
1 回答
16176 浏览
提问于 2025-04-16 18:41

我有一个函数,它接收一个打开的文件对象 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

撰写回答