Столкновение со встроенной ошибкой. ValueError и проблема с удалением определенной строки из файла CSV - PullRequest
0 голосов
/ 23 мая 2019

Я сталкиваюсь с ошибкой, которая, как я знаю, часто встречается, но всегда есть небольшая проблема, которую я не могу понять. Я также сделал функцию удаления, но она удаляет все в файле CSV вместо конкретной строки, даже с ошибкой. Как правильно сделать эту функцию?

После редактирования кода он по-прежнему выдает ту же ошибку, поэтому я надеюсь, что смогу получить некоторую помощь здесь, спасибо!

Формат данных в моем CSV:

name    tribe      id    Air  Water Earth Fire
Aang    Normad    N321B   89   67     54   78
Gyatso  Omaticaya O111C   54   78     65   54
def insert_avatar():

    filePath = "data.csv"
    with open(filePath) as csvfile:
        reader = csv.DictReader(csvfile)

        filePath = "sample_write_data.csv"
    with open(filePath,'a',newline='') as csvfile:
        fieldnames = ['name','tribe','id','Air','Water','Earth','Fire']
        writer = csv.DictWriter(csvfile,fieldnames=fieldnames)

        print("Insert a new avatar")

        name = input("Enter Name:")

        three_integer = int(input("Enter id three integers:"))

        tribename = input("Enter tribe:")

        air = int(input("Air:"))

        water = int(input("Water:"))

        earth = int(input("Earth:"))

        fire = int(input("Fire:"))

        id_F_letter = tribename[0].upper()
        average_power = (air + water + earth + fire)/4

        if average_power >=80:
            last_letter = 'A'

        elif average_power >= 70:
            last_letter ='B'

        elif average_power >= 60:
            last_letter ='C'

        elif average_power >=50:
            last_letter ='D'

        elif average_power >= 40:
            last_letter ='E'

        else:
            last_letter = 'F'


        ID = id_F_letter + str(three_integer)+ last_letter    

        print("New Avatar with ID {0} Inserted".format(ID))

        info =[]    
        Avatar_List ={}
        Avatar_List['name'] = name
        Avatar_List['id'] = ID
        Avatar_List['tribe'] = tribename
        Avatar_List['Air'] = air
        Avatar_List['Water'] = water
        Avatar_List['Earth'] = earth
        Avatar_List['Fire'] = fire        

        info.append(Avatar_List)

        for dictionary in info:
            if csvfile.tell() == 0:
                writer.writeheader()

            writer.writerow(dictionary)   

def d_avatar():
    filePath = "data.csv"
    with open(filePath) as csvfile:
        reader = csv.DictReader(csvfile)

        filePath = "sample_write_data.csv"
    with open(filePath,'w',newline='') as csvfile:
        fieldnames = ['name','tribe','id','Air','Water','Earth','Fire']
        writer = csv.DictWriter(csvfile,fieldnames=fieldnames)

        print("Delete an avatar")
        deletion = input("Enter avatar id to delete: ")

        for row in reader:
            if row['id'] == deletion:
                del row


                print("Avatar Record Deleted")





...