gpt4 book ai didi

python-2.7 - 使用 Python 3 中的 unicode 字符串从 Python 2 中解压数据

转载 作者:行者123 更新时间:2023-12-04 20:08:15 26 4
gpt4 key购买 nike

我已经从 2.7 中腌制了我这样腌制的数据:

#!/usr/bin/env python2
# coding=utf-8

import pickle

data = {1: datetime.date(2014, 3, 18),
'string-key': u'ünicode-string'}

pickle.dump(data, open('file.pickle', 'wb'))

我发现在 Python 3.4 中加载它的唯一方法是:
data = pickle.load(open('file.pickle', "rb"), encoding='bytes')

现在我的 unicode 字符串很好,但字典键是 bytes . print(repr(data))给出:
{1: datetime.date(2014, 3, 18), b'string-key': 'ünicode-string'}

有没有人想改写我的代码,比如 data[b'string-key']分别转换所有现有文件?

最佳答案

这不是真正的答案,而只是一种解决方法。这会将腌制数据转换为 Python 3.4 中的版本 3(在 3.3 中不起作用):

#!/usr/bin/env python3

import pickle, glob

def bytes_to_unicode(ob):
t = type(ob)
if t in (list, tuple):
l = [str(i, 'utf-8') if type(i) is bytes else i for i in ob]
l = [bytes_to_unicode(i) if type(i) in (list, tuple, dict) else i for i in l]
ro = tuple(l) if t is tuple else l
elif t is dict:
byte_keys = [i for i in ob if type(i) is bytes]
for bk in byte_keys:
v = ob[bk]
del(ob[bk])
ob[str(bk,'utf-8')] = v
for k in ob:
if type(ob[k]) is bytes:
ob[k] = str(ob[k], 'utf-8')
elif type(ob[k]) in (list, tuple, dict):
ob[k] = bytes_to_unicode(ob[k])
ro = ob
else:
ro = ob
print("unprocessed object: {0} {1}".format(t, ob))
return ro

for fn in glob.glob('*.pickle'):

data = pickle.load(open(fn, "rb"), encoding='bytes')
ndata = bytes_to_unicode(data)
pickle.dump(ndata, open(fn + '3', "wb"))

Python docs说:

The pickle serialization format is guaranteed to be backwards compatible across Python releases.



我没有找到 pickle.load 的方法Python-2.7 在 Python 3.3 中腌制数据——甚至不包含仅包含 int 的数据s 和 date s。

关于python-2.7 - 使用 Python 3 中的 unicode 字符串从 Python 2 中解压数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com