0

連絡先リストを維持するために python pickle を使用しています。2 つの質問があります。

  1. 新しい人物が追加された後、すべての人物が印刷されたリスト全体が表示されません。新しい人だけが印刷されます。コードの何が問題になっていますか?
  2. 連絡先を 1 つ削除する場合、ローカル ファイルを変更するにはどうすればよいですか?

コード:

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()
4

2 に答える 2

1

新しい人だけをファイルに書き込んで、既存のデータを上書きしています。リストをファイルに書き込むことができます (常にリストを読み取り、書き込む前に新しい値を追加します) 必要な動作を得ることができます。

ワークフローは次のようになります。

  • ファイルから現在のリストを読み取る
  • 変更 (連絡先の追加、連絡先の削除)
  • 多分もっと多くのものを変える...
  • リストをファイルに書き戻す

リストなしでそれを行うことも可能です (ただし、より複雑です):

  • 「Guy」が提案したように、'a'代わりに使用する'w'pickle.dump()、同じファイルハンドラーを複数回使用してファイルに追加します
  • pickle.load()EOFErrorが発生するまで、そのようなファイルで複数回

そのようなファイルからエントリを削除するには、すべてのエントリをロードし、必要なすべてのエントリをファイルに保存する必要があります ( などfilter())。

于 2013-11-13T05:37:58.227 に答える
0

Python ドキュメントhttp://docs.python.org/2/tutorial/inputoutput.htmlから:

'w' は書き込み専用で (同じ名前の既存のファイルは消去されます)、'a' は追加用にファイルを開きます。

連絡先を削除し、その行を細かくしてファイルから削除するには、ファイル内の特定の行を削除する (python)を参照してください。

于 2013-11-13T05:37:57.690 に答える