Encoding issues when converting Pyhon 2 to Python 3 (using lmdb)
up vote
1
down vote
favorite
I'm trying to convert some code in Python 2 to Python 3. I'm not too familiar with the changes in how encoding works between the two versions of Python, so was not exactly sure how to word the question.
Basically in Python 2 the code looks like this:
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))
In Python 2, "img_tmp" would be a string object with unreadable characters (printing it gives me a mess: �PNGIHDR � �A�� gAMA ���acHRMz&��� ��u0�`...). And the next line would open the image as a pillow image.
In Python 3, the line txn.get() would give me an error "TypeError: Won't implicitly convert Unicode to bytes; use .encode()" so I I followed the suggestion and converted the line to:
img_tmp = txn.get(img_key.encode())
However, img_tmp is now a bytes object that reads something like this: "b'x89PNGrnx1anx00 ..."
And the next line would no longer open the image. Any suggestions on how to change the code to get it to work?
python python-3.x python-2.7 lmdb
add a comment |
up vote
1
down vote
favorite
I'm trying to convert some code in Python 2 to Python 3. I'm not too familiar with the changes in how encoding works between the two versions of Python, so was not exactly sure how to word the question.
Basically in Python 2 the code looks like this:
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))
In Python 2, "img_tmp" would be a string object with unreadable characters (printing it gives me a mess: �PNGIHDR � �A�� gAMA ���acHRMz&��� ��u0�`...). And the next line would open the image as a pillow image.
In Python 3, the line txn.get() would give me an error "TypeError: Won't implicitly convert Unicode to bytes; use .encode()" so I I followed the suggestion and converted the line to:
img_tmp = txn.get(img_key.encode())
However, img_tmp is now a bytes object that reads something like this: "b'x89PNGrnx1anx00 ..."
And the next line would no longer open the image. Any suggestions on how to change the code to get it to work?
python python-3.x python-2.7 lmdb
I was able to generate a string object that looks similar to what I get in Python 2 using txn.get(image_key.encode()).decode("ascii", "replace") or txn.get(image_key.encode()).decode("utf-8", "replace") However i still can't open the pillow image.
– matohak
Nov 9 at 15:08
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I'm trying to convert some code in Python 2 to Python 3. I'm not too familiar with the changes in how encoding works between the two versions of Python, so was not exactly sure how to word the question.
Basically in Python 2 the code looks like this:
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))
In Python 2, "img_tmp" would be a string object with unreadable characters (printing it gives me a mess: �PNGIHDR � �A�� gAMA ���acHRMz&��� ��u0�`...). And the next line would open the image as a pillow image.
In Python 3, the line txn.get() would give me an error "TypeError: Won't implicitly convert Unicode to bytes; use .encode()" so I I followed the suggestion and converted the line to:
img_tmp = txn.get(img_key.encode())
However, img_tmp is now a bytes object that reads something like this: "b'x89PNGrnx1anx00 ..."
And the next line would no longer open the image. Any suggestions on how to change the code to get it to work?
python python-3.x python-2.7 lmdb
I'm trying to convert some code in Python 2 to Python 3. I'm not too familiar with the changes in how encoding works between the two versions of Python, so was not exactly sure how to word the question.
Basically in Python 2 the code looks like this:
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))
In Python 2, "img_tmp" would be a string object with unreadable characters (printing it gives me a mess: �PNGIHDR � �A�� gAMA ���acHRMz&��� ��u0�`...). And the next line would open the image as a pillow image.
In Python 3, the line txn.get() would give me an error "TypeError: Won't implicitly convert Unicode to bytes; use .encode()" so I I followed the suggestion and converted the line to:
img_tmp = txn.get(img_key.encode())
However, img_tmp is now a bytes object that reads something like this: "b'x89PNGrnx1anx00 ..."
And the next line would no longer open the image. Any suggestions on how to change the code to get it to work?
python python-3.x python-2.7 lmdb
python python-3.x python-2.7 lmdb
asked Nov 9 at 15:00
matohak
244
244
I was able to generate a string object that looks similar to what I get in Python 2 using txn.get(image_key.encode()).decode("ascii", "replace") or txn.get(image_key.encode()).decode("utf-8", "replace") However i still can't open the pillow image.
– matohak
Nov 9 at 15:08
add a comment |
I was able to generate a string object that looks similar to what I get in Python 2 using txn.get(image_key.encode()).decode("ascii", "replace") or txn.get(image_key.encode()).decode("utf-8", "replace") However i still can't open the pillow image.
– matohak
Nov 9 at 15:08
I was able to generate a string object that looks similar to what I get in Python 2 using txn.get(image_key.encode()).decode("ascii", "replace") or txn.get(image_key.encode()).decode("utf-8", "replace") However i still can't open the pillow image.
– matohak
Nov 9 at 15:08
I was able to generate a string object that looks similar to what I get in Python 2 using txn.get(image_key.encode()).decode("ascii", "replace") or txn.get(image_key.encode()).decode("utf-8", "replace") However i still can't open the pillow image.
– matohak
Nov 9 at 15:08
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You’re almost there: just use BytesIO
instead of StringIO
, since your binary data is a bytes
and not a str
.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
You’re almost there: just use BytesIO
instead of StringIO
, since your binary data is a bytes
and not a str
.
add a comment |
up vote
1
down vote
accepted
You’re almost there: just use BytesIO
instead of StringIO
, since your binary data is a bytes
and not a str
.
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You’re almost there: just use BytesIO
instead of StringIO
, since your binary data is a bytes
and not a str
.
You’re almost there: just use BytesIO
instead of StringIO
, since your binary data is a bytes
and not a str
.
answered Nov 9 at 22:21
Davis Herring
7,2891634
7,2891634
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53228180%2fencoding-issues-when-converting-pyhon-2-to-python-3-using-lmdb%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I was able to generate a string object that looks similar to what I get in Python 2 using txn.get(image_key.encode()).decode("ascii", "replace") or txn.get(image_key.encode()).decode("utf-8", "replace") However i still can't open the pillow image.
– matohak
Nov 9 at 15:08