如何使用 Python 读取本地 IndexedDB 数据?

2022-01-12 16:20:42 +08:00
 Deteriorator

如题

我电脑上有个软件存储数据用的是 IndexedDB , 文件名后缀是 .ldb (LevelDB), 主要是我想把我以前记录的数据全部拿出来, 方便总结。 软件自身没有我想要总结功能

但是我用 Python3.7+ 和 leveldb 库读取 *.leveldb 目录的时候一直报错

>>> import leveldb
>>> db = leveldb.LevelDB('****.leveldb')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
leveldb.LevelDBError: Invalid argument: idb_cmp1 does not match existing comparator : leveldb.BytewiseComparator

用 plyvel 库也是同样的错误

>>> import plyvel
>>> db = plyvel.DB('****.leveldb')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "plyvel/_plyvel.pyx", line 247, in plyvel._plyvel.DB.__init__
  File "plyvel/_plyvel.pyx", line 94, in plyvel._plyvel.raise_for_status
plyvel._plyvel.Error: b'Invalid argument: idb_cmp1 does not match existing comparator : leveldb.BytewiseComparator'

有没有大佬知道怎么解决?

2798 次点击
所在节点    Python
4 条回复
alphanow
2022-01-12 16:59:38 +08:00
你这个软件不是 Chrome 本身就是一个基于 Chromium 或者 Electron 开发的软件,因为 idb_cmp1 是 Chrome 用的 comparator 。你需要自己实现一个 comparator 。

```
plyvel.DB(name, comparator=func, comparator_name="idb_cmp1")
```
Deteriorator
2022-01-12 17:07:44 +08:00
@alphanow 有没有 comparator 实现的例子? 不明白这是啥
alphanow
2022-01-12 17:27:31 +08:00
理论上你要实现和 Chromium 源代码一致的 comparator ,但如果是只读取数据的话,随便什么比较函数都行:
def func(a,b):
return 1 if a > b else ( -1 if a < b else 0)
Deteriorator
2022-01-12 17:41:18 +08:00
@alphanow 多谢,我试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/827847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX