将Pyhon 2转换为Python 3(使用lmdb)时的编码问题

时间:2018-11-09 15:00:36

标签: python python-3.x python-2.7 lmdb

我正在尝试将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 \ ...”

下一行将不再打开图像。关于如何更改代码以使其正常工作的任何建议?

1 个答案:

答案 0 :(得分:1)

您快要准备好了:只需使用BytesIO而不是StringIO,因为您的二进制数据是bytes而不是str