Ich arbeite an der Erstellung eines kurzen, einfachen Programms für eine Nonprofit-Spendenaktion, um Ticketnummern beim Einchecken zu überprüfen, um sicherzustellen, dass keine doppelten Tickets eingelöst werden. Ich verwende Python 3.4.3 auf einem Windows 10-Rechner. Sobald das Programm abgeschlossen ist, wird es auf einem Raspberry Pi mit Touchscreen bei der Spendenaktion verwendet werden.TypeError: 'DictWriter' -Objekt ist nicht iterierbar
Ich habe ein paar verschiedene Methoden ausprobiert, um die Liste zu erstellen, zu speichern und nach Duplikaten zu suchen. Idealerweise wird die Liste in einer CSV-Datei gespeichert, aber ein einfacher Text oder ein anderes Format ist auch in Ordnung.
Können Sie mir mit dem Traceback-Fehler helfen (TypeError: 'DictWriter' -Objekt ist nicht iterierbar) aufgrund der Looping-Funktion, um Ticket # gegen eine in einer Datei gespeicherte Liste zu prüfen, um sicherzustellen, dass keine doppelten Tickets eingelöst werden?
Vielen Dank im Voraus für Ihre Hilfe!
version = "v1.4"
fname="tickets.csv"
import csv
import datetime
import os.path
print("\nWelcome to TicketCheck", version)
extant = os.path.isfile(fname)
with open(fname, 'a', newline='') as csvfile:
fieldnames = ['ticketid', 'timestamp']
ticketwriter = csv.DictWriter(csvfile, fieldnames=fieldnames)
if extant == False:
ticketwriter.writeheader()
while True:
ticket = ""
print("Please enter a ticket # to continue or type exit to exit:")
ticket = str(input())
if ticket == "":
continue
if ticket == "exit":
break
print("You entered ticket # %s." % (ticket))
print("Validating ticket...")
for row in ticketwriter:
if row[0] == ticket:
print("\n\n\n===== ERROR!!! TICKET # %s ALREADY CHECKED IN =====\n\n\n" % (ticket))
continue
time = datetime.datetime.now()
print("Thank you for checking in ticket # %s at %s \n\n\n" % (ticket, time))
print("Ticket is now validated.")
ticketwriter.writerow({'ticketid': ticket, 'timestamp': time})
csvfile.flush()
continue
csvfile.close()
print("All your work has been saved in %s.\n Thank you for using TicketCheck %s \n" % (fname, version))