Создание локальной базы данных с использованием python и невозможность продолжения из-за «ключевых ошибок» (полный код ниже) - PullRequest
0 голосов
/ 07 августа 2020

Итак, я работал над своим кодом python, чтобы создать простую базу данных студентов и университетов, в которых они учатся, используя классы и библиотеку pandas. Это выглядит так -

  1. Я пытаюсь создать базу данных, в которой пользователь может вводить данные своего колледжа, включая курсы, в уже созданный файл csv (отлично работает)
  2. Я пытаюсь добавить функцию для удаления всей строки деталей (идентификатор, название колледжа, курс колледжа, город колледжа, сборы и пин-код), когда пользователь вводит идентификатор колледжа из файла csv.
<code>import pandas as pd
import csv
from csv import writer

def append_list_as_row(file_name, list_of_elem):
    # Open file in append mode
    with open(file_name, 'a+', newline='') as write_obj:
        # Create a writer object from csv module
        csv_writer = writer(write_obj)
        # Add contents of list as last row in the csv file
        csv_writer.writerow(list_of_elem)

class College:
    def __init__(self, collegeId, collegeName, courseType, city, fees, pinCode):
        self.collegeId = collegeId
        self.collegeName = collegeName
        self.courseType = courseType
        self.city = city
        self.fees = fees
        self.pinCode = pinCode
        
#The @classmethod decorator exists so you can create class methods that are passed to the actual class object within the function call
    @classmethod
    def student(self):
        collegeId = str(input("Enter college ID: "))
        collegeName = str(input("Enter college's name: "))
        courseType = str(input("Enter course: "))
        city = str(input("Enter city: "))
        fees = str(input("Enter fees: "))
        pinCode = str(input("Enter pincode: "))

        cond = str(input("Would you like to delete any entry? Type Yes or No: "))
        if cond in ['yes', 'Yes', 'YES', 'Y', 'y']:
            df = pd.read_csv('colleges.csv')
            df = df.dropna(how = 'all') #filtering rows that don't have any data
            df = df.set_index('identity')
            delete_row = input("please enter the id of the college whose data needs to be deleted: ")
            df.drop(df[df['identity'] == delete_row].index, inplace = True)
        elif cond in ['no', 'No', 'NO', 'N', 'n']:
            row_contents = [] #empty list initiation
            row_contents.append(collegeId)
            row_contents.append(collegeName)
            row_contents.append(courseType)
            row_contents.append(city)
            row_contents.append(fees)
            row_contents.append(pinCode)
            append_list_as_row('colleges.csv', row_contents)
        else:
            print("invalid entry. Please reply with a Yes or No.")
        return self(collegeId, collegeName, courseType, city, fees, pinCode)


data = College.student()
print(data)

В строке 36 я получаю сообщение об ошибке -

KeyError: 'identity'

Требуется небольшая поддержка при удалении части строки, потому что я застрял на несколько часов. Я новичок ie.

Также вот формат файла csv -

 Identity, cname, course, city, fees, pincode
...