在 python 3 中使用 python 2 架子

2024-03-20

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

当我尝试从 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。底层数据库是Python 3 for Windows 中的dumbdbm。

我最初考虑为 Python 3 安装第三方 bsddb 模块,但很快就变得很麻烦。然后,每当我需要在新机器上使用相同的架子文件时,这似乎都会成为一个反复出现的麻烦。所以我决定将文件从 bsddb 转换为 dumpdbm,我的 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 文件看起来一切正常,等待对内容进行双重检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 python 3 中使用 python 2 架子 的相关文章

随机推荐

  • rstudio - 是否可以在后台运行代码

    关于 RStudio 的问题 假设我在控制台中运行代码 gt code1 假使 假设code1 在控制台上不打印任何内容 但是code1 以上需要一个小时才能完成 我想在等待的同时做点别的事code1 是否可以 有没有类似的函数runInB
  • 为什么我会收到“找不到所请求的资源”。当访问简单的喷涂路线时?

    我尝试了一个简单的喷雾示例应用程序 但无法访问路线 我将示例源代码上传到了 github 但该示例源代码不起作用 喷雾 Tomcat 示例 https github com avidanyum spray tomcat example gi
  • 左排除加入续集

    我有两张表 其中一张表有另一张表的 ID 1 1 关系 所以像 EventFeedback somePrimaryKey userEventID UserEvent userEventID Sequelize 的关系定义为 models U
  • 在 Windows 10 上无法查看 Robomongo 中的集合

    我在互联网上彻底搜索但几乎找不到任何东西 我已经在 Windows 10 上安装了 MongoDB 3 2 0 和 Robomongo 0 8 5 安装后我能够成功启动 MongoDB 作为服务 之后 我在成功运行的 DBRestore e
  • Javascript 中两个字符串之间的网络效率差异

    我有一个网络应用程序 其中客户端编辑器正在编辑服务器端已知的非常大的文本 客户可以对此文本进行任何类型的修改 什么是最网络效率高如何以服务器理解的方式传输结果差异 另外 由于这将发生在客户端 Javascript 我也希望它 快 或者至少不
  • 无法从 Firebase 上的存储引用获取 URI

    我正在尝试获取存储在 Firebase 存储中的图像 URI 以便使用另一种方法对其进行处理 我正在使用以下内容 FirebaseStorage storage FirebaseStorage getInstance StorageRefe
  • 并行运行子进程

    我有一个 python 脚本 它必须调用某个应用程序 3 次 这些调用应该是并行的 因为它们需要几个小时才能完成并且彼此不依赖 但他们的脚本应该停止 直到所有脚本都完成 然后做一些清理工作 这是一些代码 do some stuff for
  • 重新安装 Android studio 会导致我的 Google Maps API 无法在我的应用程序中显示吗?

    我创建了一个利用 Google Maps API 的应用程序 我总是通过将其副本保存在外部驱动器上来备份我的应用程序 我最近重新安装了 Windows 并且不得不重新安装 Android Studio 当我导入保存的应用程序项目并运行它时
  • jQuery 禁用链接直到页面加载

    我有一个附加到链接的 jquery 弹出窗口 如果单击链接时页面未完全加载 即 js 文件 它将在浏览器窗口中打开 而不是弹出窗口 我正在考虑禁用 隐藏链接 直到加载页面 处理这种情况的最佳实践是什么 您有任何代码示例吗 首先将链接放在 d
  • 如何动态添加新值以选择 jira 中的列表字段或使用插件

    这是我的用例 1 我有一个 客户名称 文本字段和 所有客户 单选列表 2 问题解决后 我想选择 客户名称 中存在的值 并希望添加到 所有客户 中 如果要添加的值已存在于 所有客户 中 我就能够实现此目标 但我想用新值填充 所有客户 字段 如
  • Dragula JS通过点击事件从一个列表移动到另一个列表

    我使用 Dragula JS 进行拖放功能 并且我还希望可以选择通过单击鼠标来来回移动列表中的元素 而不会失去拖放功能 我该如何实现这一点 所以我单击元素 1 它将移动到列表中 我从该列表中将其单击回来 它就会向后移动 就是这个想法 如果有
  • Oracle 日期差值获取年数

    有没有办法计算日期之间的年数 不知道如何在考虑跳跃和不考虑什么的情况下做到这一点 是否可以在 SELECT 中执行 IF 语句 Thanks I d use months between 可能与floor select floor mont
  • 为什么使用 number_format() 我的数值会发生变化?

    下面的代码给了我两个不同的输出 number 1562798794365432135246 echo number echo number format number 谁能解释一下吗 编辑 忘了提及 上面给了我 15627987943654
  • 将 XPCOM 组件公开给网页中的 javascript

    我想编写一个 XPCOM 组件 该组件在网页中作为 JavaScript 对象公开 我正在寻找像 Google Gears 这样的东西 也就是说 安装 Google Gears Firefox 扩展后 任何想要使用它的网页都可以使用 jav
  • 使 Windows 服务像从特定用户运行一样运行

    我想创建一个 Windows 服务来安装和卸载真密码 http www truecrypt org 体积 这个问题与 true crypt 无关 所以如果您不知道该程序是什么也没关系 True Crypt 只是一个使您能够加密数据的程序 当
  • 从 PHP 上传多个文件到 Amazon S3

    有没有一种方法可以一次性上传多个文件 而不必为每个文件重新连接 我使用 S3 作为我的 php 应用程序的存储 该应用程序需要存储大量 一次 100 个 大多数较小 大约 10k 的图像文件 目前我正在循环遍历它们并使用以下代码为每个单独上
  • ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

    我刚刚将我的 Web 应用程序从 ASP NET Framework MVC 升级到 ASP NET Core 2 2 该应用程序在 IIS Express 下运行良好 但是当我尝试在 IIS 下运行它时 它会给出一般错误 HTTP 错误
  • react-test-renderer create() 与 @testing-library/react render()

    我是 React 新手 对所有测试库感到困惑 我的测试代码可以工作 但调用似乎是多余的create 来自react test renderer以便使用它的toMatchSnapshot 并且必须打电话render 来自 testing li
  • 如何使用 C# 将 json 插入到 cosmos db 集合中

    我有一个 Json 文件 我想将其存储在 cosmos DB 集合中 如何使用 C 添加完整的 Json 文件 有同样的客户端库吗 我已经浏览过以下网址微软网址 https learn microsoft com en us azure c
  • 在 python 3 中使用 python 2 架子

    我将数据存储在使用 python 2 7 创建的架子文件中 当我尝试从 python 3 4 访问该文件时 出现错误 gt gt gt import shelve gt gt gt population shelve open shelve