首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Python工具架从dbm.gnu转换为dbm.dumb

将Python工具架从dbm.gnu转换为dbm.dumb
EN

Stack Overflow用户
提问于 2020-09-22 17:35:12
回答 1查看 172关注 0票数 1

我正在尝试将存储在非哑盘中的数据转换为哑盘,以便能够在未安装非哑库的位置访问我的数据。

我用于转换数据库数据的测试代码如下所示:

代码语言:javascript
复制
import numpy as np
import shelve
import dbm

# create test shelve
sample = list(range(0, 10))
filename = 'test'
new_filename = 'test-dumb'

with shelve.open(filename) as data:
    data['sample'] = sample
print('current db type: ', dbm.whichdb(filename))


# test test shelve
with shelve.open(filename) as data:
    print('in current db: ', list(data.keys()))


# read test shelve
with shelve.open(filename) as data:
    # store in dumb format
    with dbm.dumb.open(new_filename) as dumb_data:
        dumb_data = data
        print('in new db: ', list(dumb_data.keys()))
print('\nnew db type: ', dbm.whichdb(new_filename))


# check dumb shelve
with dbm.dumb.open(new_filename) as dumb_data:
    print(list(dumb_data.keys()))
    if dumb_data['sample'] == sample:
        print('success: ', sample)
    else:
        print('not yet: ', sample)

输出如下:

代码语言:javascript
复制
current db type:  dbm.gnu
in current db:  ['sample']
in new db:  ['sample']
new db type:  dbm.dumb
[]
Traceback (most recent call last):
  File "/home/asdf/anaconda3/envs/phievo/lib/python3.7/dbm/dumb.py", line 153, in __getitem__
    pos, siz = self._index[key]     # may raise KeyError
KeyError: b'sample'

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-22 20:02:33

您需要遍历原始数据库的键,并使用以下赋值:

代码语言:javascript
复制
dumb_data = data

将只用一个指向data的“指针”覆盖dumb_data变量。

该程序应如下所示:

代码语言:javascript
复制
import numpy as np
import shelve
import dbm

...

# copy data into dumb
with shelve.open(filename) as data:
    # store in dumb format
    with dbm.dumb.open(new_filename) as dumb_data:
        for key, value in data.items():
            dumb_data[key] = value
        print('in new db: ', list(dumb_data.keys()))

我只是将赋值替换为:

代码语言:javascript
复制
for key, value in data.items(): 
    dump_data[key] = value`
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64006974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档