【问题标题】:cPickle underflow errorcPickle 下溢错误
【发布时间】:2013-03-19 11:17:39
【问题描述】:

我正在尝试使用 cPickle 加载文件,如下所示,

import cPickle

cPickle.load(open('test', 'rb'))

但是,我得到了这个错误,

---------------------------------------------------------------------------
UnpicklingError                           Traceback (most recent call last)
<ipython-input-527-1b7653ff1917> in <module>()
----> 1 cPickle.load(open('test', 'rb'))

UnpicklingError: unpickling stack underflow

有时它会给出这个错误

UnpicklingError: could not find MARK

我得到这个有什么原因吗?

PS:cPickle 无法与我一起使用任何文件,即使是新创建的仅包含两个单词的文件。我使用的是 ubuntu 12.04 和 Python 64bit

【问题讨论】:

  • 看起来您可能缺少一些前导或尾随字节。你是怎么做文件的?你关门前冲水了吗?小到可以在这里发帖吗?
  • @dan.lecocq,我已经更新了问题,基本上,它不适用于任何文件,文件内容类似于“测试测试”,我通过右键单击文件创建来创建文件
  • 您能否发布以下输出:cPickle.loads(cPickle.dumps("test"))
  • 是的, In [544]: cPickle.loads(cPickle.dumps("test")) Out[544]: 'test'
  • 好的。好吧,至少您的cPickle 模块相对健全:-)。当你说你的文件内容类似于“测试测试”时,你是手工制作这个文件吗?它们必须由cPickle 制作,才能由cPickle 阅读。除此之外,我会尝试将其写入文件,并验证它是否与cPickle.dumps('test') 匹配。如果您加入 SO 聊天,我们可以进行更多的交互式调试。

标签: python file-io pickle


【解决方案1】:

试试这个它为我解决了错误:

import pickle
import pandas as pd


# read in csv file to pandas dataframe and save as pickle file
training_data = pd.read_csv('train.csv')
pickle_out = open('train.pkl', 'wb')
pickle.dump(training_data, pickle_out)
pickle_out.close() 


# open pickle file
file = 'train.pkl'
with open(file, 'rb') as f:
    training_data = pickle.load(f)
        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多