除了明显的(一个是类型,另一个类)?什么应该是首选?用例中有任何明显的差异吗?
答案 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.BytesIO
或io.StringIO
,具体取决于用例。这与python 3向前兼容并提交到字节或unicode,而不是"两者,也许"。