Python 类型错误:';口述作者';对象是不可编辑的

Python 类型错误:';口述作者';对象是不可编辑的,python,csv,export-to-csv,Python,Csv,Export To Csv,我正在为一个非营利筹款者创建一个简短的简单程序,在客人入住时验证车票号码,以确保没有重复的车票被兑换。我正在Windows10机器上运行Python 3.4.3。一旦该计划最终确定,它将在筹款会上用在带有触摸屏的树莓皮上 我尝试了几种不同的方法来构建列表、保存列表和搜索重复的列表。理想情况下,列表将存储在CSV文件中,但纯文本或其他格式也可以 你能帮我解决回溯错误(TypeError:“DictWriter”对象不可编辑),因为循环功能可以根据存储在文件中的列表检查票证,以确保没有重复的票证被兑

我正在为一个非营利筹款者创建一个简短的简单程序,在客人入住时验证车票号码,以确保没有重复的车票被兑换。我正在Windows10机器上运行Python 3.4.3。一旦该计划最终确定,它将在筹款会上用在带有触摸屏的树莓皮上

我尝试了几种不同的方法来构建列表、保存列表和搜索重复的列表。理想情况下,列表将存储在CSV文件中,但纯文本或其他格式也可以

你能帮我解决回溯错误(TypeError:“DictWriter”对象不可编辑),因为循环功能可以根据存储在文件中的列表检查票证,以确保没有重复的票证被兑换

提前感谢您的帮助

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))
类的对象是不可iterable的,也就是说,不能像遍历字典、列表甚至字符串那样对它们进行迭代,因此会出现错误消息。它不存储您以前写入文件的数据,只有您写入的文件存储该数据


为了实现您的目标,您可以做两件事:要么在每次需要验证新票证时打开您的CSV文件,并检查票证号码是否存在,要么——因为您使用的数据量相对较少——将字典存储在内存中,并且仅在使用结束时将其写出,然后从中检查票证是否有效

嗯,我想你可能把事情复杂化了一点!对于这样的事情,真的没有必要这么麻烦。这是一个使用字典的好地方,对于只有两个输入的东西,id和签入时间,您可以轻松地创建一个.txt日志。我觉得这可能更符合你的要求

import time
go = True
while go:
    the_guestlist = {}
    the_ticket = input().strip()
    file = open('somefile.txt', 'r')
    for line in file:
        my_items = line.split(',')
        the_guestlist[my_items[0]] = my_items[1]
    file.close()
    if the_ticket in the_guestlist.keys():
        print("Sorry, that ticket has been entered at {}".format(the_guestlist[the_ticket]))
    elif the_ticket == 'exit':
        go = False
        print('Exiting...')
    else:
        the_guestlist[the_ticket] = '{}'.format(time.asctime())
        file = open('somefile.txt', 'a')
        file.write(the_ticket +','+the_guestlist[the_ticket]+'\n')
        file.close()