【问题标题】:How do I check if a row already exists in a csv file?如何检查 csv 文件中是否已存在行?
【发布时间】:2021-03-18 04:55:06
【问题描述】:

我正在尝试一个员工到员工的 csv 文件,除非我已经有他的数据。在这种情况下,我想向用户提出错误。当我运行代码时,我没有收到任何错误,但也没有添加员工。 感谢您的帮助!

import csv

class Employee(object):

    def __init__(self, employee_id, name, phone, age):
        self.employee_id = employee_id
        self.name = name
        self.phone = phone
        self.age = age

class Employees_list(object):

    def __init__(self, list_of_employees):
        self.list_of_employees = list_of_employees

    def add_employee(self, new_employee):
        new_employee_data = [new_employee.employee_id, new_employee.name, new_employee.phone, new_employee.age]
        with open(self.list_of_employees) as file1:
            existing_lines = csv.reader(file1)
            for row in existing_lines:
                if row not in new_employee_data:
                    new_employee_data.append(row)
                else:
                    print("Sorry, the employee is already exist.")

【问题讨论】:

  • 您是否尝试过打印出“new_employee_data”,然后打印出 csv 文件的每一行,以检查换行符或空格等细微差异是否导致问题?
  • @AlexanderKalian 是的,我可以正确打印 new_employee_data 和 existing_lines,检查员工是否已经存在并将其添加到 csv 是不对的,我不知道是什么

标签: python arrays database csv append


【解决方案1】:

你把比较倒过来了。 if row not in new_employee_data 询问现有员工的整行是否在任何一条新员工信息中。而是询问新员工是否在任何现有行中。我将支票移到了with 之外。阅读完 csv 后,无需将其保持打开状态。

    def add_employee(self, new_employee):
        new_employee_data = [new_employee.employee_id, new_employee.name, new_employee.phone, new_employee.age]
        with open(self.list_of_employees) as file1:
            existing_lines = csv.reader(file1)
        if new_employee_data not in existing_lines:
            new_employee_data.append(row)
            # todo: save the new csv
        else:
            print("Sorry, the employee is already exist.")

当然请注意,如果新员工信息和现有员工信息的拼写有任何差异,这将失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多