Python Pickle-2问题

Python Pickle-2问题,python,pickle,Python,Pickle,我正在使用python pickle来维护联系人列表。我有两个问题: 在添加一个新的人员后,我看不到所有人员的整个列表都已打印出来。只有新人被打印出来。代码有什么问题 如果我要删除一个联系人,如何更改本地文件 守则: import pickle class contact: person= {}; def add(self, name,contact): self.person[name] = contact; store2file(se

我正在使用python pickle来维护联系人列表。我有两个问题:

  • 在添加一个新的人员后,我看不到所有人员的整个列表都已打印出来。只有新人被打印出来。代码有什么问题
  • 如果我要删除一个联系人,如何更改本地文件
  • 守则:

    import pickle
    
    class contact:
        person= {};    
        def add(self, name,contact):
            self.person[name] = contact;
            store2file(self.person);
            #print(self.contactlist);        
        def delete(self,name):
            del self.person[name];
            #print(self.person);  
        def modify(self,name,contact):
            self.person[name] = contact;
            store2file(self.person);  
    
    def store2file(person):
        mycontactfile = 'contactlist.data';
        f = open(mycontactfile,'wb');
        pickle.dump(person,f);
        f.close();
    
        f = open(mycontactfile,'rb');
        storedcontact = pickle.load(f);
        print (storedcontact);
    
    def main():
        mycontact = contact();
        option = input('Pls select option: 1 Add; 2 delete; 3 update: ');
        if option == '1':
            name = input('Enter the name: ');
            contactNo = input('Enter the contact number: ');
            mycontact.add(name,contactNo);
            store2file(mycontact);
    
        elif option =='2':
            name = input('Enter the name: ');
            mycontact.delete(name);
        elif option =='3':
            name = input('Enter the name: ');
            contactNo = input('Enter the contact number: ');
            mycontact.modify(name,contactNo);
        else:
            print('Pls select proper option');
    
    main()
    
    来自python文档:

    “w”仅用于写入(具有相同名称的现有文件将被删除),而“a”打开文件进行追加


    要删除联系人,请修改其行并将其从文件中删除,请参见

    您只将新联系人写入文件,覆盖现有数据。您可以将列表写入文件(总是在写入之前读取列表并附加新值),以获得您想要的行为

    工作流程应如下所示:

    • 从文件中读取当前列表
    • 更改内容(添加联系人、删除联系人)
    • 也许换更多的东西
    • 将列表写回文件
    也可以(但更复杂)在没有列表的情况下执行:

    • 使用
      'a'
      而不是
      'w'
      和/或
      pickle.dump()
      使用同一文件处理程序多次向“Guy”建议的文件追加
    • pickle.load()

    要从这样的文件中删除一个条目,您必须加载每个条目,并将您仍然需要的所有条目保存回该文件(如
    filter()
    )。

    为什么您要使用名为
    store2file
    的方法读取联系人文件?如果我只想使用Pickle而不是list,可以实现吗?我在答案中添加了一个方法来实现。谢谢。看来a不适用于泡菜?没有错过什么吗?