Python词典&;CSV值|检查CSV

Python词典&;CSV值|检查CSV,python,csv,Python,Csv,csv文件工作正常。字典也是如此,但我似乎无法检查csv文件中的值,以确保我没有添加重复的条目。我怎么检查这个?我尝试的代码如下: def write_csv(): csvfile = csv.writer(open("address.csv", "a")) check = csv.reader(open("address.csv")) for item in address2: csvfile.writerow([

csv
文件工作正常。
字典也是如此,但我似乎无法检查
csv
文件中的值,以确保我没有添加重复的条目。我怎么检查这个?我尝试的代码如下:

    def write_csv():
        csvfile = csv.writer(open("address.csv", "a"))
        check = csv.reader(open("address.csv"))
        for item in address2:
            csvfile.writerow([address2[items]['address']['value'],address2[items]['address']['count'],items, datetime.datetime.now()])


    def check_csv():
        check = csv.reader(open("address.csv"))
        csvfile = csv.writer(open("address.csv", "a"))
        for stuff in address2:
            address = address2[str(stuff)]['address']['value']
            for sub in check:
                if sub[0] == address:
                    print "equals"
                    try:
                        address2[stuff]['delete'] = True
                    except:
                        address2[stuff]['delete'] = True
                else:
                    csvfile.writerow([address2[stuff]['address']['value'], address2[stuff]['address']['count'], stuff, datetime.datetime.now()])

有什么想法吗?

你的CSV和dict结构有点不稳定-我很想知道这是否设置好了,或者你是否可以将它们更改为更有用的。这是一个基本上满足您需要的示例--您必须更改一些内容以适应您的格式。最重要的变化可能是不写入正在读取的文件,这将导致头痛

这就是您对delete标志的要求——是否有外部需要?如果没有,几乎可以肯定有更好的方法(删除坏行,将好行保存到其他地方,等等,这取决于您正在做什么)

无论如何,这里是一个例子。我首先使用注释块创建csv文件,然后将新地址添加到列表中,然后运行其余的。它不是反复遍历文件,而是按地址进行查找并存储行号,然后在读取csv文件时使用行号更新删除标志。您需要取出打印内容并取消最后一行的注释,以实际写入新行

import csv, datetime

addresses = [
    {'address': {'value': '123 road', 'count': 1}, 'delete': False},
    {'address': {'value': '456 road', 'count': 1}, 'delete': False},
    {'address': {'value': '789 road', 'count': 1}, 'delete': False},

    {'address': {'value': '1 new road', 'count': 1}, 'delete': False},
]

now = datetime.datetime.now()

### create the csv
##with open('address.csv', 'wb') as csv_file:
##    writer = csv.writer(csv_file)
##    for row in addresses:
##        writer.writerow([ row['address']['value'], row['address']['count'], now.strftime('%Y-%m-%d %H:%M:%S') ])

# make lookup keys for the dict
address_lookup = {}
for i in range(len(addresses)):
    address_row = addresses[i]
    address_lookup[address_row['address']['value']] = i

# read csv once
with open('address.csv', 'rb') as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
        print row
        # if address is found in the dict, set delete flag to true
        if row[0] in address_lookup:
            print 'flagging address as old: %s' % row[0]
            addresses[ address_lookup[row[0]] ]['delete'] = True

with open('address.csv', 'ab') as csv_file:
    # go back through addresses and add any that shouldnt be deleted to the csv
    writer = csv.writer(csv_file)
    for address_row in addresses:
        if address_row['delete'] is False:
            print 'adding row: '
            print address_row
            #writer.writerow([  row['address']['value'], row['address']['count'], now.strftime('%Y-%m-%d %H:%M:%S') ])

它以什么方式不起作用?你有错误吗?如果是,什么错误?你到底想做什么?支票中的地址2是什么?有几件事您需要更改,但我们会在您澄清问题时解决。@Keeyai,我正在尝试确保
字典
address2
中的新项目不在
csv
文件
address.csv
中。如果它已经在
csv
文件中,我想将其标记为删除(但不是实际删除),如果它不在
csv
文件中,则添加新行。它从上面抛出了一个
键错误
,我不明白为什么(当每个
项单独测试时,它工作正常)是address2[项]中的键错误?也许你是说那个东西?太好了。在使用
django
mysql
之前,它肯定更适合内部测试,因为您可能知道有一个非常方便的功能,名为
get\u或\u create
,包含地址等对象。