将pickle对象写入并检索到文件

时间:2016-05-04 19:01:45

标签: python

我正在为计算机科学课创建一个地址簿,我们应该在程序关闭时将一个对象列表“contact”写入文件,并在程序启动时从文件中读取。但是,在将数据写入文件后,一旦读取它,它似乎不会保留其对象形式。

import pickle

class Contact:
                        #Creating the class with the attributes I want
def __init__(self, firstname, lastname, number, areacode, city):
    self.firstname = firstname
    self.lastname = lastname
    self.number = number
    self.areacode = areacode
    self.city = city

def __str__(self):
    return  "({0} {1}, {2}, {3}, {4})".format(self.firstname, self.lastname, self.number, self.areacode, self.city)
                        #reading the object
def opendata():
    readable = []
    addresses = []
    A = open("Address_book", "rb+")
    addresses = A.read()
    A.close
    B = len(addresses)
    if B != 0:
        readable = pickle.loads(addresses)
        return readable
    else:
        return addresses

def savedata(file):
    addresses = open("Address_book", "wb+")
    temp = pickle.dumps(file)
    addresses.write(temp)
    addresses.close()

def Address_manager():
    Address = []
    fromfile = opendata()
    Address.append(fromfile)
    while True:
        print("add = add contact, modify = modify contact, search = search contacts, end = close program, print = print full list")
        A = input("What do you want to do?: ")
        if A == "end":
            savedata(Address)
            break
        else:
            if A == "print":
                for i in Address:
                    print(str(i))
                    print("")
                continue
            elif A == "add":
                Address.append(add_contact())
                print("")
                continue
            elif A == "search":
                lists2 = search_contact(Address)
                A = 0
                for i in lists2:
                    A += 1
                    print(A, str(i))
                    print("")
                print("")
                continue
            elif A == "modify":
                modified = modify_contact(Address)
                Address.append(modified)
                print("")
                continue

def add_contact():
    while True:
        try:
            A = Contact(input("First name: "), input("Last name: "), input("Phone Number: "), input("Area Code: "), input("City: "))
            print(str(A))
            B = input("Is this right?: (y/n)")
            if B == "y":
                print("Well done?")
                return A
            else:
                print("Try Again")
                continue



        except:
            print("bad data")

如果我在从文件中获取列表后尝试“打印”列表,则会以错误的形式打印它们。我做错了什么,为什么?

编辑1:我为效率低下的代码道歉。

编辑2:添加了添加联系人的功能

0 个答案:

没有答案
相关问题