如何获取fi上一个对象的信息

2024-05-14 01:00:45 发布

您现在位置:Python中文网/ 问答频道 /正文

def __init__(self):
    self.name=''
    self.id=''
    self.sal=0.0
    self.allowance=0.4*self.sal
    self.ded = 0.1*self.sal
    self.npay = self.sal+self.allowance-self.ded
def Input(self):
    self.name = raw_input('name')
    self.id = raw_input('id')
    self.sal = float(raw_input("salary"))
def create(self):
    f = open("pay.dat","wb")
    pickle.dump(self,f)
    f.close()
def read_file(self):
    f = open('pay.dat','rb')
    x = pickle.load(f)
    print"_"*45
    print '{0:<15s}{1:15s}{2:15s}'.format("Employee_Id","Name","Basic salary")
    print"_"*45
    print '{0:<15s}{1:15s}{2:15f}'.format(x.id,x.name,x.sal)
    f.close()
def add(self):
    self.Input()
    self.create()
    self.read_file()

注意:腌菜是预先进口的,是制作的。 当我创建类的对象时,is按正确的顺序显示所有信息。但是,当我添加新数据时,它不会同时打印以前的数据。我该怎么做


Tags: nameselfidinputrawdefcreateopen
1条回答
网友
1楼 · 发布于 2024-05-14 01:00:45

您的创建方法:

def create(self):
    f = open("pay.dat","wb")
    pickle.dump(self,f)
    f.close()

将上一个文件截断为0字节,并在每次调用时写入新对象的信息。要保留文件上的信息而不截断它,请以"ab"模式而不是"wb"模式打开它

也就是说,用于读取和显示信息的代码将只从文件中读取单个对象。即使它正在读取更多的对象,它甚至不会尝试在读取的对象上循环以打印多个对象上的信息

这里唯一有效的方法是,您可以在同一个文件中按顺序pickle多个对象,然后它们按顺序读回

因此,您可以像下面这样重写“read\u file”方法-但是您甚至没有尝试在多个对象上进行循环迭代,这表明您必须学习更多的内容,以便更好地理解这个示例。请确保您在Python交互式提示中获得了一些关于序列和循环(forwhile)的阅读和实践。这里看起来是一个很好的地方来获取基本知识: https://www.tutorialspoint.com/python/python_while_loop.htm

def read_file(self):
    print"_"*45
    print '{0:<15s}{1:15s}{2:15s}'.format("Employee_Id","Name","Basic salary")
    print"_"*45
    with (open('pay.dat','rb')) as f:
        while True:
            try:
                x = pickle.load(f)
            except EOFError: 
                # no more objects to read - exit loop
                break 

            print '{0:<15s}{1:15s}{2:15f}'.format(x.id,x.name,x.sal)

相关问题 更多 >