Python v2.5 中的 BytesIO
问题:
我该如何在Python 2.5中获取一个像StringIO那样的字节流?
应用场景:
我正在把一个PDF文件转换成文本,但不想把文件保存到硬盘上。
其他想法:
我想我可以使用StringIO,但它没有模式参数(我猜“String”意味着文本模式)。
显然,io.BytesIO类是在2.6版本中新加的,所以我也不能用这个。
我有一个使用tempfile模块的解决方案,但我想避免任何对硬盘的读写操作。
2 个回答
2
如果你在处理PDF文件,那么使用StringIO
是可以的,只要你注意一下文档中的说明:
StringIO
对象可以接受Unicode字符串或者8位字符串,但如果两者混用,就需要小心了。如果同时使用了这两种字符串,8位字符串如果不能被当作7位ASCII字符(也就是使用了第8位的字符)来理解,那么在调用getvalue()
的时候就会出现UnicodeError错误。
需要注意的是,这对cStringIO
来说并不成立:
与
StringIO
模块提供的内存文件不同,cStringIO
模块提供的文件不能接受那些不能被编码为普通ASCII字符串的Unicode字符串。
想要了解更多信息,可以查看完整的文档:
4
在Python 2.x中,“字符串”指的是“字节”,而“unicode”指的是“字符串”。你应该使用StringIO
或cStringIO
模块。具体使用哪种模式,取决于你传入的缓冲区参数是什么类型的数据。