Python2.7中的StringIO和io.StringIO有什么区别?

时间:2010-08-04 22:18:47

标签: python string

除了明显的(一个是类型,另一个类)?什么应该是首选?用例中有任何明显的差异吗?

2 个答案:

答案 0 :(得分:28)

http://docs.python.org/library/io.html#io.StringIO

http://docs.python.org/library/stringio.html

我明白这一点。

  

unicode文本的内存中流。它继承了TextIOWrapper。

     

该模块实现了一个类文件类StringIO,它读写字符串缓冲区(也称为内存文件)。

io.StringIO是一个班级。它处理Unicode。它反映了首选的Python 3库结构。

StringIO.StringIO是一个班级。它处理字符串。它反映了遗留的Python 2库结构。

  

应该首选什么?

始终向新的图书馆组织迈进。 io.open应该用于替换内置的Unicode-unaware open

转发。前进。

答案 1 :(得分:4)

就python 2.7和3而言:

io.BytesIO是一个类似内存文件的对象,不会对换行进行任何更改,与open(filename, "wb")类似。它处理bytes()字符串,py2.7中的字符串是str的别名。

io.StringIO是一个类似内存文件的对象, 对换行进行更改,类似于open(filename, "w")。它处理unicode()字符串,py3.x中的字符串是str的别名。

py2.7的旧StringIO.StringIO是一个类似内存文件的对象,不会对换行进行更改,类似于open(filename, "w")。它以与大多数过时的python 2字符串方法相同的方式处理unicode()bytes():通过允许您无错误地混合它们,但只要您幸运。 / p>

因此,py2.7的旧StringIO.StringIO类实际上比io.StringIO更类似于io.SytesIO,因为它以字节()/ str()运行并且没有'做换行转换。

  

应该首选什么?

请勿使用StringIO.StringIO,而是使用io.BytesIOio.StringIO,具体取决于用例。这与python 3向前兼容并提交到字节或unicode,而不是"两者,也许"。