【发布时间】:2015-07-12 12:40:10
【问题描述】:
我编写了一个基本的存储类,它将数据保存在列表列表中,然后将其写入文件,然后允许从文件中读回以保持持久性。它在最初编写的系统(windows 7)上运行,我将它移到第二个系统(windows 8),现在它似乎出现故障。
我收到的错误是:
Traceback (most recent call last):
File "D:\Code Vault\pydb.py", line 69, in <module>
print Users.ReadData()
File "D:\Code Vault\pydb.py", line 23, in ReadData
self.data = cPickle.load(self.Inputstream)
EOFError
类的完整代码如下
class table():
#TODO Insert Key Feild to facilitate ID Search
def __init__(self,*args):
self.tablename = args[0]
self.data = []
self.colnames = {}
self.filename = str(self.tablename)+ ".p"
for e in args[1:]:
self.colnames.update({e:len(self.colnames)})
self.Filestorage = open(self.filename, "wb" )
self.Filestorage.close()
def ReadData(self):
self.Inputstream = open(self.filename, "rb")
self.Inputstream.seek(0)
self.data = cPickle.load(self.Inputstream)
self.Inputstream.close()
return self.data
def AddData (self, *args):
self.tempdata = []
for e in args:
self.tempdata.append(e)
if len(args) == len(self.colnames):
self.data.append(self.tempdata)
else:
return "Incorrect argument quantities"
return self.tempdata
def Commit(self):
self.Outputstream = open(self.filename, "ab" )
cPickle.dump(self.data, self.Outputstream)
self.Outputstream.close()
return self.ReadData()
def Search(self,query):
for e in self.ReadData():
if query in e:
return self.ReadData().index(e)
else:
return "Value " + str(query) + " does not exist"
def Update(self,query, edit):
for e in self.data:
if query in e:
e[e.index(query)] = edit
return self.data
def DumpTable(self):
self.data = []
self.Outputstream = open(self.filename+".p", "wb" )
cPickle.dump(self.data, self.Outputstream)
self.Outputstream.close()
self.ReadData()
Users = table("Users","Username","Password")
Users.AddData("bob","123456")
# Users.Commit()
# print Users.data
# print Users.filename
# print Users.data
print Users.ReadData()
这可能是代码盲目的情况,因为它以前工作过。任何想法将不胜感激
【问题讨论】:
-
还应该注意的是,即使数据已经提交并且在文件中,Users.commit() 函数也未注释,当从提交函数返回时,ReadData 函数正确输出
-
进一步检查表明,当调用 ReadData() 函数时,它正在擦除泡菜文件的内容...
-
我想通了,这不是因为缺乏研究,因为反对票可能会让你相信。在类的顶部,我已经初始化了每次运行模块时要创建的文件,因此它正在擦除文件的内容并产生错误,删除文件创建并使其有条件地解决了问题。 @MihaiHangiu 我假设这是代码盲目和代码愚蠢而不是缺乏研究是正确的!