我保存了一些搁置的物体。在另一个文件中,我能够恢复这些对象。但是,当我将档案复制到另一台电脑时,给我一个_gdbm.error: File read error
。包含存储对象类的包可以在两台计算机上直接访问(但它们存储在不同的位置并添加了PYTHONPATH)。这两台机器都运行在Ubuntu 13.10上,一个是32位,另一个是64位。搁置其他计算机上无法打开的档案
这些档案不应该是机器独立的吗?
在64位机器,我得到
>>> import shelve
>>> shelve.open('arch.db')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.3/shelve.py", line 232, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/usr/lib/python3.3/shelve.py", line 216, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "/usr/lib/python3.3/dbm/__init__.py", line 94, in open
return mod.open(file, flag, mode)
_gdbm.error: File read error
和32位机它的工作原理上。
当我创建64位机器上的档案,它是32位机器上打开的,但交互式Python提示符崩溃:
>>> import shelve
>>> s = shelve.open('arch.db')
>>> for i in s.items(): print(i)
...
gdbm fatal: lseek error
我甚至不得到回溯。
这真的很烦人,我打算在两台计算机上工作,但目前我必须使用低速的32位eeepc,因为我已经在存档中保存了很多内容。
两台计算机上的文件都有相同的md5sum – sauerburger
如果尝试使用'shelve.open('arch')'会发生什么?一些dbm后端默认将'.db'添加到文件名中。 – mata
当我省略扩展名时,shelve没有找到该文件... – sauerburger