关于Python 2.x 与Python3.x中StringIO
2020-01-16 本文已影响0人
ThompsonHen
最近在帮导师做科研项目遇到一个问题,就是在Python 2.x中的StringIO模块在Python 3.x中找不到了。我查了好久的资料又问了一些同学,才发现这个模块被并入io 中了,所以我重新从io模块中import了StringIO。
from io import StringIO
使用后发现仍然报错,就随手print了一下,发现要输出的type是Byte类型的,而StringIO只能处理字符串类型的数据。
这可把我愁坏了,因为参考代码给出的源码是这样的:
def read_png(res):
import StringIO, PIL.Image
img = PIL.Image.open(StringIO.StringIO(res))
return np.asarray(img)
显然,他应该是想先把res强制转换成字符串类型,再去读这个数据。
可是我找了半天也没找到StringIO类的下面有个StringIO的属性,我太南了!
上网找了半天,发现好像没有人遇到跟我相似的问题!
然后在io模块中找了一下,发现有个BytesIO的类。
image.png
咦,这不正好用来处理我那个Byte类型的数据嘛!!!
然后我改写了刚才的参考代码:
def read_png(res):
import PIL.Image
im = io.BytesIO(res)
img = PIL.Image.open(im)
plt.imshow(img)
plt.show()
成功啦!!!