【问题标题】:Opening pickle files and adding to them打开泡菜文件并添加到它们
【发布时间】:2014-08-02 22:11:01
【问题描述】:

我正在尝试将信息存储在 pickle 文件中,然后不断地将新信息附加到该文件中,而不会覆盖任何信息。这里唯一的问题是,如果我关闭程序并重新运行它,创建一个新对象并将其保存到输出会覆盖以前的信息,相当肯定有一个简单的解决方案。我的代码如下所示:

#save object to file function
def save_object(obj, filename):
  with open(filename, 'wb') as output:
    pickle.dump(obj, output, pickle.HIGHEST_PROTOCOL)


#Add employee to dict, increment id
def add_employee(self,employee):
  self.employee_dict[self.employee_id] = employee
  employee.id = self.employee_id
  self.employee_id += 1


#Get object info, call add_employee, save object
employee = Employee.from_input()
self.add_employee(employee)                    
Employee.save_object(self.employee_dict, r'Obj_file.pkl')

编辑:要加载我正在使用的文件:

elif self.menu_select == 5:
  self.load_file = open("Obj_file.pkl", 'rb+')
  self.employee_dict = pickle.load(self.load_file)
  print self.employee_dict

【问题讨论】:

    标签: python-2.7 object pickle


    【解决方案1】:

    使用追加模式:

      with open(filename, 'wb') as output:
    

    =>

      with open(filename, 'ab') as output:
    

    否则每次都会重写文件。

    【讨论】:

    • 我知道!哈哈,我正在阅读文档,但是这里有很多内容,我想我只是还没到那部分,谢谢:)
    • 令人惊讶的是这不起作用。没有错误或任何它只是做同样的事情。
    • 我收回这一点,好吧,在查看 .pkl 文件后,它实际上正在工作,但是当我加载文件时,由于某种原因它只显示列表中的前两个?
    • @After_Sunset 你如何加载?您必须加载与已保存对象一样多的次数。
    • @After_Sunset 所以你只加载一次。你必须重构你的代码。 pickle.load(self.load_file) 表示pickle会从文件中弹出最新的对象。
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2012-02-10
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多