【问题标题】:How do I load more than one python object stored in the same DAT file?如何加载存储在同一个 DAT 文件中的多个 python 对象?
【发布时间】:2021-10-27 09:24:35
【问题描述】:

所以,我仍在学习如何使用泡菜,并且对它的了解有限。这可能是一个初学者的问题...... 我创建了这个占位符类:

class Student:

  def __init__(self):
    self.__name = ""
    self.__regNum = 0
    self.__fullTime = True
 
  def getName(self):
    return self.__name
  
  def getRegNum(self):
    return self.__regNum
  
  def getFullTime(self):
    return self.__fullTime
    
  def setName(self,name):
    self.__name = name
  
  def setRegNum(self,num):
    self.__regNum = num
    
  def setFullTime(self,fullTime):
    self.__fullTime = bool(fullTime)

我创建了两个测试学生:

student1 = Student()
student1.setName("Joe")
student1.setRegNum(2110)
student1.setFullTime(1)

student2 = Student()
student2.setName("Jess")
student2.setRegNum(5124)
student2.setFullTime(0)

dumpFile = open("student.DAT","wb")
pickle.dump(student1,dumpFile)
pickle.dump(student2,dumpFile)

dumpFile.close()

loadFile = open("student.DAT","rb")
  • 但我不知道如何在将 .dat 文件作为单独的对象加载后分别读取它们。

我尝试使用我在互联网上看到的with open("student.dat", 'rb') as input:,但我不知道它是做什么来理解它为什么不起作用的。我试过 numpy.fromfile 但我不明白我得到的结果,而且我见过人们使用 pandas 但我什么都不知道。查的时候真的不明白解决办法是什么,该怎么办?

【问题讨论】:

    标签: python object oop pickle dat-protocol


    【解决方案1】:

    我建议您将list of objects 转储到您的.dat 文件中,然后在加载时检索它。

    dumpFile = open("student.DAT","wb")
    pickle.dump([student1, student2], dumpFile)
    dumpFile.close()
    
    loadFile = open("student.DAT","rb")
    data = pickle.load(loadFile)    #data now contains a list of the objects
    loadFile.close()
    

    然后你可以遍历data来分别访问每个对象。

    与使用with open 的情况一样,它很容易理解。简而言之,它确保您不必在使用后关闭文件。 例如同样的代码可以写成:

    with open("student.DAT","wb") as dumpFile:
        pickle.dump([student1, student2], dumpFile)
    
    with open("student.DAT","rb") as loadFile:
        data = pickle.load(loadFile)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多