搁置:无法确定数据库类型
shelve: db type could not be determined
我正在使用 Pycharm。首先,每当在 Pycharm 中导入任何模块时。完整的导入行淡出。但如果 import shelve
不会淡出。另外,当我 运行 文件时,出现以下错误:
Traceback (most recent call last):
File "/Users/abhimanyuaryan/PycharmProjects/shelve/main.py", line 13, in <module>
s = shelve.open("file.dat")
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 239, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 223, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/dbm/__init__.py", line 88, in open
raise error[0]("db type could not be determined")
dbm.error: db type could not be determined
这是我的代码:
import shelve
s = shelve.open("file.dat")
s["first"] = (1182, 234, 632, 4560)
s["second"] = {"404": "file is not present", "googling": "Google to search your content"}
s[3] = ["abhilasha", "jyoti", "nirmal"]
s.sync()
print(s["first"])
print(s["second"])
print(s[3])
OP 在评论中解释说 'file.dat'
是由 pickle
创建的——这就是问题所在! pickle
不使用任何数据库格式——它使用自己的格式!首先用 shelve
创建 file.dat
(即 运行 shelve
当 file.dat
尚不存在时将内容保存到其中)然后你会没事。
OP 评论:"I still don't get what's the problem in this case"。回答:问题是 pickle
不会 创建任何 DB 格式的文件 shelve
可以使用。使用单个模块进行序列化和反序列化——或者只是 pickle
,或者只是 shelve
——它会工作得更好:-)。
anydb https://bugs.python.org/issue13007 存在一个错误,无法对 gdbm
个文件使用正确的标识。
因此,如果您尝试使用 shelve 打开有效的 gdbm 文件并且发现该错误,请改用此文件:
mod = __import__("gdbm")
file = shelve.Shelf(mod.open(filename, flag))
我正在使用 Pycharm。首先,每当在 Pycharm 中导入任何模块时。完整的导入行淡出。但如果 import shelve
不会淡出。另外,当我 运行 文件时,出现以下错误:
Traceback (most recent call last):
File "/Users/abhimanyuaryan/PycharmProjects/shelve/main.py", line 13, in <module>
s = shelve.open("file.dat")
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 239, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 223, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/dbm/__init__.py", line 88, in open
raise error[0]("db type could not be determined")
dbm.error: db type could not be determined
这是我的代码:
import shelve
s = shelve.open("file.dat")
s["first"] = (1182, 234, 632, 4560)
s["second"] = {"404": "file is not present", "googling": "Google to search your content"}
s[3] = ["abhilasha", "jyoti", "nirmal"]
s.sync()
print(s["first"])
print(s["second"])
print(s[3])
OP 在评论中解释说 'file.dat'
是由 pickle
创建的——这就是问题所在! pickle
不使用任何数据库格式——它使用自己的格式!首先用 shelve
创建 file.dat
(即 运行 shelve
当 file.dat
尚不存在时将内容保存到其中)然后你会没事。
OP 评论:"I still don't get what's the problem in this case"。回答:问题是 pickle
不会 创建任何 DB 格式的文件 shelve
可以使用。使用单个模块进行序列化和反序列化——或者只是 pickle
,或者只是 shelve
——它会工作得更好:-)。
anydb https://bugs.python.org/issue13007 存在一个错误,无法对 gdbm
个文件使用正确的标识。
因此,如果您尝试使用 shelve 打开有效的 gdbm 文件并且发现该错误,请改用此文件:
mod = __import__("gdbm")
file = shelve.Shelf(mod.open(filename, flag))