首页 > 解决方案 > 尝试解开压缩的 pickle 文件会导致 OSError: Invalid data stream

问题描述

我有一个compressed pickle泡菜文件。在几次尝试中,我试图解开这个文件但没有成功。这里是根据以下资源解压压缩的 pickle 文件的代码hereherehere

首先,我尝试使用该pickle模块。

import bz2
import pickle

data = bz2.BZ2File('test.gzip', 'rb')
data = pickle.load(data)

然后,我也尝试使用该cPickle模块。

import bz2
import _pickle as cPickle

data = bz2.BZ2File('test.gzip', 'rb')
data = cPickle.load(data)

在这两次尝试中,我都得到了一个OSError: Invalid data stream函数load()。这是一个痕迹。

回溯(最近一次通话最后):
  文件“”,第 1 行,在
  文件“C:\Users\jane\Anaconda3\envs\py36\lib\bz2.py”,第 172 行,偷看
    返回 self._buffer.peek(n)
  文件“C:\Users\jane\Anaconda3\envs\py36\lib\_compression.py”,第 68 行,读入
    数据 = self.read(len(byte_view))
  文件“C:\Users\jane\Anaconda3\envs\py36\lib\_compression.py”,第 103 行,已读取
    数据 = self._decompressor.decompress(原始块,大小)
OSError:无效的数据流

我认为这可能与我的 Python 环境有关,但是在为 Conda 中的 Python 3.6、3.7 和 3.8 创建 Python 环境之后,我已经测试了这些代码片段。我仍然得到同样的错误。我也搬到了 Ubuntu (WSL) 并在 Python 3.8 conda 环境中尝试了它,并得到了同样的错误。

关于发生了什么的任何想法?

我在这里这里查看了这些 SO 帖子,但问题和解决方案并不真正适用。

标签: pythoncompressionpickle

解决方案


扩展.gzip应该给了我一个线索。

import gzip
import pickle

with gzip.GzipFile('test.gzip', 'rb') as f:
    df = pickle.load(f)

我看到的所有示例都使用bz2gzip.


推荐阅读