通过pickle加载时,文件数据会被删除

时间:2018-03-29 17:06:26

标签: python

我创建了一个名为Animals的类来创建类似动物的对象,当我创建对象并使用pickle模块将其保存到一个名为animals.txt的文件时,它工作得非常好但是当我尝试从另一个python文件加载它时我得到一个错误,说" EOFError:输出"之后,该文件上的整个数据将被完全删除。我不明白为什么会这样。也许是因为文件大小可能足以让pickle处理。

from pickle import *
fo=open(animals.txt,"wb+")
List = []
try:
     fo1=tuple (load (fo))
     List .append (fo1)
except EOFError:
     pass
class Animal:
     def __init__(self, age, name,, owner, speed)
           self.age=age
           self.name =name
           self.owner=owner
           self.speed=speed
    def diplay_attr (self):
          return 'age = {0}, name={1}, owner={2}, speed =
          {3} ' .format(self.age,self.name,self.owner,self.speed)

#creating objects
Dog = Animal (10, 'Tommy', 'bill', '6ft', '15mph')
Cat = Animal (3, 'perry', 'kevin', '2ft', '12mph')
D = Dog.display_attr ()
C = Cat.display_attr


#saving everything to the list
List.append (tuple (D))
List.append (tuple (C))

#dumping List contents to the file
dump (List,fo)
fo.close ()

现在,如果我从另一个python文件加载文件内容,因为我说文件上的整个数据都被删除

这是我用来加载文件的代码

from pickle import *
List =[]
with open('robots.txt','wb+') as fo:
      fo2=tuple (load (fo))
      List.append (fo2)
print (List)

执行时出现错误

fo2 = tuple (load (fo))
EOFError: Ran out of input

三江源。任何帮助表示赞赏

编辑:对不起,我没有意识到我输入了这个而不是自己,但在实际代码中我已经使用了自己,这里一切都很好,但问题只在加载文件时仍然存在

2 个答案:

答案 0 :(得分:0)

当您从您创建的.txt文件中阅读时,您应该使用' rb'打开它,以便只具有阅读能力。

此外,请在发布前检查您的代码是否有错误,您发布的第一个代码段中有很多。

答案 1 :(得分:0)

您正在使用'wb+'模式打开文件,这意味着它会自动覆盖现有文件。它与从另一个文件加载它无关。如果您想要阅读和写作,则应使用'rb+';如果您只想阅读,则应使用'rb'。有关文件模式的更多信息,请参阅this page