Я написал базовый класс хранения, который хранит данные в списке списков, записывает их в файл, а затем позволяет прочитать его из файла для сохранения. Он работал над системой, изначально написанной (окна 7). Я переместил ее во вторую систему (окна 8), и теперь она работает неправильно.python unpickling EOFError при чтении файла
Ошибка я получаю это:
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() незакомментированной даже тогда, когда данные Allready были поручены и находится в файле, то функция выводит ReadData правильно, когда возвращается из функции фиксации – Lobsterbob
дальнейшей проверки показывает, что когда функция ReadData() называется стиранием содержимого файла pickle ... – Lobsterbob
Я понял, что это было не из-за отсутствия исследований, так как подавляющие голоса могут заставить вас поверить. В верхней части класса я инициализировал файл, который должен быть создан каждый раз, когда модуль запускался, таким образом, он удалял содержимое файла и создавал ошибку, удаляя создание файла и делая его условным решением проблемы. @MihaiHangiu Я был прав, предполагая, что это слепота кода, а также глупость кода, а не отсутствие исследований! – Lobsterbob