首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消对python 3.1.1中的python 2.6对象的筛选

取消对python 3.1.1中的python 2.6对象的筛选
EN

Stack Overflow用户
提问于 2011-06-26 09:50:14
回答 1查看 754关注 0票数 1

在python2.6中,我定义了一个Abc类,创建了一个dict d,其中key是字符串,值是abc对象。然后我将这个字典转储到一个文件中,如下所示- pickle.dump(d,open('filename.pkl','wb'))

我可以用以下命令成功加载python2.6

代码语言:javascript
复制
d1 = pickle.load(open('filename.pkl', 'rb'))

(d1与d相同)

但是当我尝试在python 3.1中加载它时,只加载了第一个键(字符串

代码语言:javascript
复制
d1 = pickle.load(open('filename.pkl', 'rb'))

print(d1)
keyname1

酸洗过的文件开始如下所示

代码语言:javascript
复制
(dp0
S'keyname1'
p1
(iabc
ABC
p2 

因此,在3.1中,它似乎只加载文件中的第一个字符串。我对编码等不太了解。你有什么想法可以在3.1.1中加载我的dict d吗?

编辑-我的类(abc.py)两次都在同一个工作目录中,不确定这是否重要?

一次又一次的编辑-我意识到我应该更好地澄清,这样它就可以很容易地被复制。我的代码有buggy,这既是因为名称冲突,也是因为我没有正确定义我的类。

无论如何,我只是尝试了以下方法,并了解到我应该从类ABC (Object)开始:而不仅仅是类ABC。并且我应该在第二次导入模块之前删除.pyc文件。

我所做的

尝试1

ABC.py

代码语言:javascript
复制
class ABC():
   pass

在python-2.6中

代码语言:javascript
复制
import pickle
import ABC
d = {'keyname1': ABC.ABC()}
pickle.dump(d, open('filename.pkl', 'wb'))
quit()

在python-3.1中

代码语言:javascript
复制
import pickle
d1 = pickle.load(open('filename.pkl', 'rb'))
print(d1)
 keyname1
quit()

尝试2

但当我更改了ABC.py中的类定义,使其变为类ABC(object):而不只是类ABC:,删除了旧的filename.pkl,ABC.pyc并重复,

在python-2.6中

代码语言:javascript
复制
# same as before

在python-3.1中

代码语言:javascript
复制
import pickle
d1 = pickle.load(open('filename.pkl', 'rb'))
print(d1)
{'keyname1': <ABC.ABC object at 0x638890>}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-26 14:42:06

以下代码适用于Python 2.6.6和Python 3.1.3:

Python 2.6代码:

代码语言:javascript
复制
import pickle

class ABC(object):
    pass
d = {'keyname1': ABC()}

# Dump!
pickle.dump(d, open('filename.pkl', 'wb'))

Python 3.1代码:

代码语言:javascript
复制
import pickle

class ABC(object):
    pass

# Load:
d1 = pickle.load(open('filename.pkl', 'rb'))

print(d1)

结果是:

代码语言:javascript
复制
{'keyname1': <__main__.ABC object at 0x8c99eec>}

因此,很明显,加载ABC对象工作得很好。我认为问题在于您的模块abc和标准库中名为abc的模块之间存在名称冲突,并且这种名称冲突在Python2和Python3中表现不同。

解决方案:重命名您的模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6481670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档