【发布时间】:2014-11-02 12:08:02
【问题描述】:
在我的脚本中,我尝试使用 cPickle 保存字典。一切正常,除了加载字典已修改每个键。
我的字典看起来像:{'a':[45,155856,26,98536], 'b':[88,68,9454,78,4125,52]...}
当我在保存之前从该字典中打印键时,它会打印正确的值:'a','b'...
但是当我保存它然后使用 cPickle 加载时,每个键在正确的字符后包含'\r':'a\r','b\r'...
这是保存的代码:
def saveSuffixArrayDictA():
for i in self.creation.dictA.keys():
print len(i)
print 'STOP'
with open('dictA','w+') as f:
pickle.dump(self.creation.dictA,f)
哪个打印:1,1,1,1,1,1....STOP(当然是换行符)
然后,当我尝试使用此加载它时:
@staticmethod
def dictA():
with open('ddictA','rb') as f:
dict = pickle.load(f)
for i in dict.keys():
print len(i)
print 'STOP'
return dict
它返回:2,2,2,2,2,2,2,2...STOP(当然还有换行符)
如您所见,它应该是相同的,但它不是...请问问题出在哪里?
编辑:我尝试打印值并意识到列表中的每个项目(列表是值)都在该项目的末尾添加了“L”,这是一个数字。
【问题讨论】:
-
如果将写入模式从
w+更改为wb+会发生什么? (由于w+是一种文本模式,在Windows 上它会将\n映射到\r\n。) -
@unutbu 谢谢你的帮助!现在,它可以正常工作了。
标签: python dictionary pickle