wadeheat2 发表于 2014-02-05 22:24

请教一个pickle的问题

源码是这样的:
#coding=utf-8
import pickle
posdata = pickle.load(open('pos_review.pkl','r'))
posWords = list(itertools.chain(*posdata))
print posWords


其中 pos_review.pkl 是ANSI格式的,里面的内容是:
123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}


代码运行后,错误是:
Traceback (most recent call last):
File "C:\Python27\pc\test1.py", line 4, in <module>
    posdata = pickle.load(open('pos_review.pkl','r'))
File "C:\Python27\lib\pickle.py", line 1378, in load
    return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 858, in load
    dispatch(self)
File "C:\Python27\lib\pickle.py", line 1142, in load_pop_mark
    k = self.marker()
File "C:\Python27\lib\pickle.py", line 874, in marker
    while stack is not mark: k = k-1
IndexError: list index out of range



请问我哪里错了吗?请指教,谢谢各位

timespace 发表于 2014-02-06 10:31

pickle中的ANSI格式是什么?我看pos_review.pkl的内容,根本都不像合法pickle格式。>>> import pickle
>>> from cStringIO import StringIO
>>> infile = StringIO('123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}')
>>> data = pickle.load(infile)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1378, in load
    return Unpickler(file).load()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 858, in load
    dispatch(self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1142, in load_pop_mark
    k = self.marker()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 874, in marker
    while stack is not mark: k = k-1
IndexError: list index out of range
>>> infile.getvalue()
'123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}'
>>> infile = StringIO()
>>> pickle.dump(,{"key":"value","key1":"value1"}], infile)
>>> infile.getvalue()
"(lp0\nI123\naS'abcdedf'\np1\na(lp2\nS'ac'\np3\naI123\naa(dp4\nS'key1'\np5\nS'value1'\np6\nsS'key'\np7\nS'value'\np8\nsa."

wadeheat2 发表于 2014-02-06 11:59

回复 2# timespace

那请教下怎么从pos_review.pkl文件载入数据呢?

   

timespace 发表于 2014-02-06 12:45

回复 3# wadeheat2
按照二进制模式打开open(..., 'rb'),然后pickle.load,就这么简单。如果有问题,说明xxx.pkl本身就是非法数据。


   

wadeheat2 发表于 2014-02-06 17:44

回复 4# timespace

open和load写在一条语句里没啥问题吧?我分开先open,再load报同样的错

   

timespace 发表于 2014-02-06 18:06

回复 5# wadeheat2
是否分开,没影响。除非你能上传xxx.pkl文件,爱莫能助。


   
页: [1]
查看完整版本: 请教一个pickle的问题