包装Python的io.open函数

时间:2016-05-04 08:50:11

标签: python io

您可能知道,Python的io.open函数在非二进制模式下创建的文件流(例如io.open("myFile.txt", "w", encoding = "utf-8")不接受非unicode字符串。由于某种难以解释的原因,我想对这些文件流的write - 方法进行修补,以便将string转换为unicode在调用实际的write - 方法之前。我的代码目前看起来像这样:

import io
import types

def write(self, text):
    if not isinstance(text, unicode):
        text = unicode(text)
    return super(self.__class__, self).write(text)

def wopen(*args, **kwargs):
    f = io.open(*args, **kwargs)
    f.write = types.MethodType(write, f)
    return f

但是,它不起作用:

>>> with wopen(p, "w", encoding = "utf-8") as f:
>>>    f.write("test")
UnsupportedOperation: write

由于我无法真正研究那些built-in - 方法,我不知道如何分析问题。

提前致谢!

0 个答案:

没有答案