【发布时间】:2018-11-10 06:21:00
【问题描述】:
我正在尝试将 Python 2 中的一些代码转换为 Python 3。我不太熟悉两个 Python 版本之间编码工作方式的变化,因此不确定如何表达这个问题。
基本上在 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()”所以我按照建议将行转换为:
img_tmp = txn.get(img_key.encode())
但是,img_tmp 现在是一个字节对象,读取如下内容:“b'\x89PNG\r\n\x1a\n\x00\ ...”
下一行将不再打开图像。有关如何更改代码以使其正常工作的任何建议?
【问题讨论】:
-
我能够使用 txn.get(image_key.encode()).decode("ascii", "replace") 或 txn 生成一个看起来类似于我在 Python 2 中得到的字符串对象.get(image_key.encode()).decode("utf-8", "replace") 但是我还是打不开枕头图片。
标签: python python-3.x python-2.7 lmdb