我正在尝试将Python 2中的某些代码转换为Python3。我不太了解两个Python版本之间的编码工作方式的变化,因此不确定如何表达该问题。< / p>
基本上在Python 2中,代码如下:
image_key = "image_3"
env = lmdb.open(some arguments here)
with env.begin(write=False) as txn:
img_tmp = txn.get(image_key)
img = Image.open(StringIO(img_tmp))
在Python 2中,``img_tmp''将是一个字符串对象,具有不可读的字符(将其打印给我一团糟:PNGIHDR�A��gAMA�acHRMz&���u0�...) 。然后下一行将打开该图像作为枕头图像。
在Python 3中,行txn.get()会给我一个错误“ TypeError:不会隐式将Unicode转换为字节;请使用.encode()”,因此II遵循了建议,并将行转换为:>
img_tmp = txn.get(img_key.encode())
但是,img_tmp现在是一个字节对象,其读取内容如下:“ b'\ x89PNG \ r \ n \ x1a \ n \ x00 \ ...”
下一行将不再打开图像。关于如何更改代码以使其正常工作的任何建议?
答案 0 :(得分:1)
您快要准备好了:只需使用BytesIO
而不是StringIO
,因为您的二进制数据是bytes
而不是str
。