gpt4 book ai didi

python - 在 python 3 中使用 python 2 架子

转载 作者:太空狗 更新时间:2023-10-29 22:26:08 26 4
gpt4 key购买 nike

我将数据存储在使用 python 2.7 创建的 shelf 文件中

当我尝试从 python 3.4 访问文件时,出现错误:

>>> import shelve
>>> population=shelve.open('shelved.shelf')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\shelve.py", line 239, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "C:\Python34\lib\shelve.py", line 223, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "C:\Python34\lib\dbm\__init__.py", line 88, in open
raise error[0]("db type could not be determined")
dbm.error: db type could not be determined

我仍然可以在 python 2.7 中毫无问题地访问货架,因此似乎存在向后兼容性问题。有没有什么办法可以用新的 python 版本直接访问旧格式?

最佳答案

据我现在的理解,这是导致我的问题的路径:

  • 最初的架子是在 Windows 中使用 Python 2 创建的
  • Python 2 Windows 默认使用 bsddb 作为搁置的基础数据库,因为 dbm 在 Windows 平台上不可用
  • Python 3 不附带 bsddb。底层数据库是 Windows Python 3 中的 dumbdbm。

我最初考虑为 Python 3 安装第三方 bsddb 模块,但它很快就变得很麻烦。然后,每当我需要在新机器上使用相同的 shelf 文件时,这似乎都是一个反复出现的麻烦。所以我决定将文件从 bsddb 转换为 dumbdbm,我的 python 2 和 python 3 安装都可以读取。

我在 Python 2 中运行了以下命令,这是同时包含 bsddb 和 dumbdbm 的版本:

import shelve
import dumbdbm

def dumbdbm_shelve(filename,flag="c"):
return shelve.Shelf(dumbdbm.open(filename,flag))

out_shelf=dumbdbm_shelve("shelved.dumbdbm.shelf")
in_shelf=shelve.open("shelved.shelf")

key_list=in_shelf.keys()
for key in key_list:
out_shelf[key]=in_shelf[key]

out_shelf.close()
in_shelf.close()

到目前为止,dumbdbm.shelf 文件似乎没有问题,等待对内容进行双重检查。

关于python - 在 python 3 中使用 python 2 架子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27493733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com