繁体   English   中英

Python仅打印最后输入的数据

[英]Python only printing last data entered

我有一个作业来创建一个类,其中包含员工的姓名,身份证号,部门和职务。 用户应该能够输入多个员工的信息,并在最后打印出所有信息。

我面临的问题是只有最后一位雇员的信息才被打印出来。

import pickle
import employee
data = 'data.dat'

def main():
    output_file = open(data, 'wb')
    end_of_file = False

keep_going = 'Y'
while keep_going == 'Y':
    name = str(input('Name of employee: '))
    ID_num = int(input('Employee ID number: '))
    dep = str(input('Department: '))
    job = str(input('Job Title: '))

    emp = employee.Employee(name, ID_num)
    emp.set_department(dep)
    emp.set_job_title(job)
    pickle.dump(emp, output_file)
    keep_going = input('Enter another employee file? (Use Y / N): ')


    input_file = open(data, 'rb')
    while not end_of_file:
        try:
            emp = pickle.load(input_file)
            display_data(emp)
        except EOFError:
            end_of_file = True

    input_file.close()


    if keep_going == 'N':
        print(display_data(emp))
output_file.close()


def display_data(emp):
        print('Name','\t','\t','ID Number','\t','Department','\t','\t','Job Title')
        print(emp.get_name(), '\t', emp.get_ID_num(),'\t','\t',emp.get_department(),'\t','\t',emp.get_job_title())

main()

如果有人知道为什么会这样,并且对如何解决它有任何建议,我将不胜感激,因为我是python的新手,并且不完全了解所有概念

您需要将员工存储在内存中,然后最后写入文件。 另外,我不明白为什么您需要这段代码,它似乎没有做任何事情:

input_file = open(data, 'rb')
while not end_of_file:
    try:
        emp = pickle.load(input_file)
        display_data(emp)
    except EOFError:
        end_of_file = True

input_file.close()

因此,我们将其删除,然后进行其他一些修改。 您修改的代码:

import pickle
import employee
data = 'data.dat'

def display_data(emp):
        print('Name','\t','\t','ID Number','\t','Department','\t','\t','Job Title')
        print(emp.get_name(), '\t', emp.get_ID_num(),'\t','\t',emp.get_department(),'\t','\t',emp.get_job_title())

def main():
    output_file = open(data, 'wb')

    emp_list = []
    keep_going = 'Y'
    while keep_going == 'Y':
        name = str(input('Name of employee: '))
        ID_num = int(input('Employee ID number: '))
        dep = str(input('Department: '))
        job = str(input('Job Title: '))

        emp = employee.Employee(name, ID_num)
        emp.set_department(dep)
        emp.set_job_title(job)
        emp_list.append(emp)
        keep_going = input('Enter another employee file? (Use Y / N): ')

    pickle.dump(emp_list, output_file)
    output_file.close()

    if keep_going == 'N':
        input_file = open(data, 'rb')
        employees = pickle.load(open(data, "rb"))

        for emp in employees:
            print(display_data(emp))

main()

另外,可以使打印更整洁:

from tabulate import tabulate
def display_data(employees):
    infos = []
    for emp in employees:
        infos.append([emp.get_name(), emp.get_ID_num(), emp.get_department(), emp.get_job_title()])
    print(tabulate(infos, headers=["Name", "ID num", "Department", "Job Title"], tablefmt="fancy_grid"))

因此,要打印,更换

for emp in employees:
    print(display_data(emp))

display_data(employees)

HTH。

每次调用pickle.dump()时,它都会覆盖现有文件。 因此,首先需要将所有员工存储在列表中,然后使用dump()将其写入文件。 检索时,还需要使用pickle.load()将文件中的数据加载到列表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM