0

我从数据库中抓取了大量数据并将其保存为"first_database.db"使用 Python 的shelve模块(我使用的是 Python 3.4)。我以前遇到过问题shelve(请参阅我的旧问题),这可能是由于与我的古老操作系统(OSX 10.9.4)和gdbm/dbm.gnu.

现在我有一个更棘手的问题:我创建了一个~170 MB的新文件,现在无论如何我只能访问一个键/值。

我知道可能的键的超集,并且尝试访问它们中的任何一个都会给我一个KeyError(除了一个)。当我将不返回 a 的单个键的值保存KeyError为新的搁置数据库时,它的大小只有 16 KB,所以我知道数据在 170 MB 文件中,但我无法访问它。

我只是被搞砸了吗?

此外,我制作了数据库的副本并尝试向其中添加更多键(~95)。数据库会说它有三个键,但是当我尝试访问第三个键的值时,我收到以下错误:

File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 114, in __getitem__ value = Unpickler(f).load() _pickle.UnpicklingError: invalid load key, ''.

4

1 回答 1

0

我不知道这个问题,但也许这个替代方案可能会帮助你:

https://github.com/dagnelies/pysos

它类似于shelve但不依赖于底层实现并将其数据保存为纯文本。这样,如果发生意外情况,您甚至可以打开数据库文件以检查其内容。

另请注意,这shelve依赖于底层dbm实现。dbm这意味着如果您将搁置保存在 Linux 上,例如,如果它的实现不同(有几个),您可能无法在 Mac 上读取它。

于 2018-10-22T08:48:58.740 回答