【发布时间】:2014-07-31 15:42:40
【问题描述】:
我正在尝试使用 Pickle 将字典保存在文件中。保存字典的代码运行没有任何问题,但是当我尝试从 Python shell 中的文件中检索字典时,出现 EOF 错误:
>>> import pprint
>>> pkl_file = open('data.pkl', 'rb')
>>> data1 = pickle.load(pkl_file)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 880, in load_eof
raise EOFError
EOFError
我的代码如下。
它计算每个单词的频率和数据的日期(日期是文件名。)然后将单词保存为字典的键,并将 (freq,date) 的元组保存为每个键的值。现在我想用这本词典作为我工作另一部分的输入:
def pathFilesList():
source='StemmedDataset'
retList = []
for r,d,f in os.walk(source):
for files in f:
retList.append(os.path.join(r, files))
return retList
def parsing():
fileList = pathFilesList()
for f in fileList:
print "Processing file: " + str(f)
fileWordList = []
fileWordSet = set()
fw=codecs.open(f,'r', encoding='utf-8')
fLines = fw.readlines()
for line in fLines:
sWord = line.strip()
fileWordList.append(sWord)
if sWord not in fileWordSet:
fileWordSet.add(sWord)
for stemWord in fileWordSet:
stemFreq = fileWordList.count(stemWord)
if stemWord not in wordDict:
wordDict[stemWord] = [(f[15:-4], stemFreq)]
else:
wordDict[stemWord].append((f[15:-4], stemFreq))
fw.close()
if __name__ == "__main__":
parsing()
output = open('data.pkl', 'wb')
pickle.dump(wordDict, output)
output.close()
你认为问题是什么?
【问题讨论】:
-
您确定文件已关闭/刷新吗?
-
以这种方式使用
pickle模块转储和加载WordDict应该没问题。在转储字典之前,我会先查看一下字典中的内容,看看它的内容是否有效。 -
是的,它是有效的。一旦我将它保存在 .txt 文件中并检查过它。
-
可能是换行问题吗?查看this question