【问题标题】:Attempt to unpickle a compressed pickle file results in OSError: Invalid data stream尝试解开压缩的 pickle 文件会导致 OSError: Invalid data stream
【发布时间】:2021-03-24 21:14:49
【问题描述】:

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

首先,我尝试使用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)

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

回溯(最近一次通话最后): 文件“”,第 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 环境之后,我已经测试了这些 sn-ps 代码。我仍然得到同样的错误。我也搬到了 Ubuntu (WSL) 并在 Python 3.8 conda 环境中尝试了它,并得到了同样的错误。

有什么想法吗?

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

【问题讨论】:

  • 这是实际的文件名吗? “.gzip”(通常是“.gz”)表示一个 gzip 文件,而您使用的是处理 bzip2(“.bz2”)文件的BZ2File。如果您尝试使用 bzip2 解码器来读取 gzip 文件,那肯定行不通。

标签: python compression pickle


【解决方案1】:

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

import gzip
import pickle

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

我看到的所有示例都使用bz2 而不是gzip。

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多