我保存了一些擱置的物體。在另一個文件中,我能夠恢復這些對象。但是,當我將檔案複製到另一臺電腦時,給我一個_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