Ich bin gerade dabei, ein Quiz als ein Wettbewerb zwischen mir und meinen Freunden zu produzieren, und etwas mehr über Programmierung zu lernen, die ich relativ neu bin. Mein Programm soll die letzten 3 Ergebnisse für jeden Benutzer, der das Quiz verwendet, behalten und das älteste Ergebnis durch das neueste ersetzen. Die aktuelle Stufe, die ich erreicht habe, ist in der Lage zu überprüfen, ob der Benutzer seinen Namen in der Datei hat und wenn er nicht wie üblich in die Datei schreibt. in meiner CSV-Datei mit 3 Eingängen bereitsErsetzen bestimmter Daten in einer CSV-Datei
if team == 'Team 1':
path = 'team1scores.csv'
elif team == 'Team 2':
path = 'team2scores.csv'
elif team == 'Team 3':
path = 'team3scores.csv'
else:
print("--Error Defining File Path--")
with open(path, 'rt') as csvfile:
ver_read = csv.reader(csvfile, delimiter =",")
ver_write = csv.writer(csvfile, delimiter =",")
for row in ver_read:
if user in row:
row_data = list(ver_read)
row_len = len(row_data)
if row_len >= 3:
>>> The Problem is here
else:
with open(path, 'a+', newline='') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerows(datacsv)
Das Problem, das ich mit dem Programm haben, ist in der Lage, das Ergebnis zu ersetzen, sage ich unten die Daten hatte. Diese müssen in zwei verschiedenen Spalten gehalten werden. Da ich eine Sortierfunktion eingebaut habe.
Jake,5
Jake,7
Jake,2
Max,9
Lee,8
Ich habe oben mit der Basis des Codes mehrmals experimentiert, aber ich bin verwirrt, sobald das Programm die Situation erreicht, die Informationen zu ersetzen. Bis jetzt konnte ich die gesamte Datei überschreiben, aber keine bestimmten Daten.
Wird die ver_write in den nächsten Schritten erforderlich sein?
Edit: ich jetzt eine aktualisierte Version haben, aber immer noch das gleiche Problem, wird dieses Programm von 2ps Antwort angepasst, um in meine Kriterien passen. Es muss immer noch überschrieben werden und muss für den Namen und die Punktzahl in zwei verschiedene Zellen gedruckt werden. Die Basis ist da für das, was ich brauche, aber es wird nicht funktionieren.
from collections import OrderedDict
user_data = OrderedDict()
data_to_write = []
with open(path, 'r+') as csvfile:
ver_read = csv.reader(csvfile, delimiter =";")
for x, row in enumerate(ver_read):
if user == row[0]:
user_data[x] = row
else:
data_to_write.append(row)
if len(user_data) > 2:
keys = user_data.keys()[-2:]
for x in keys:
data_to_write.append(user_data[x])
data_to_write.append(datacsv)
with open(path, 'w') as csvfile:
ver_write = csv.writer(csvfile, delimiter=",")
ver_write.writerows(data_to_write)
else:
with open(path, 'a+', newline='') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerows(datacsv)
Mache ich etwas fundamental falsch hier? so etwas wie dies vielleicht
Was ist dein Problem? Wissen Sie nicht, wie Sie Ihre Logik implementieren oder eine Ausnahme haben? Zeigen Sie außerdem den vollständigen Code und geben Sie ein Beispiel für die Eingabe und die erwartete Ausgabe. – chinglun
Haben Sie überlegt, die Pandas-Bibliothek zu verwenden? Es macht diese Art von Sache viel einfacher - Sie können Operationen auf einem Datenrahmen viel schneller durchführen. Ich würde auch versuchen, Ihre Daten in einer einzigen Datei zu speichern, nicht in drei. Es ist wahrscheinlich besser, nur eine Spalte zu haben, die das Team/die Person identifiziert, die das Quiz durchführt. – flyingmeatball
Ist die Reihenfolge der "John, 4" -Reihen wichtig (das heißt, ist es in Ordnung, alle John-Werte gruppiert zu haben)? –