Python For循环问题

Python For循环问题,python,Python,我使用的是Python版本3.2。具有以下代码: for row2 in reader2: for row1 in reader1: if row1['identification_column'] == row2['identification_column']: row2['updated_col'] = row1['updated_col'] writer.writerow(row2) reader1是一个csv.DictReade

我使用的是Python版本3.2。具有以下代码:

for row2 in reader2:
    for row1 in reader1:
        if row1['identification_column'] == row2['identification_column']:
            row2['updated_col'] = row1['updated_col']
    writer.writerow(row2)
reader1是一个csv.DictReader对象,如下所示:

    identification_column,type

    1, bike                       
    2, guitar
    3, drums
    4, airplane
    5, computer
reader2与reader1类似,只是有一个更长更全面的文件

问题是:

我运行了所有的内部循环,如果程序没有找到匹配项,它就不会写这行代码,然后像我想的那样增加外部循环。它只是停止了。最初它给我带来了一个错误,直到我读到有人建议在writer声明语句中添加extrasaction='ignore'。但这并没有解决我的问题

我将非常感谢任何关于修复此逻辑的反馈。在我看来,接下来会发生什么:

A如果内循环没有从外循环中找到有问题的值,程序将输出外循环中的行,而不进行任何更改

B如果内部循环具有外部循环正在迭代的确切值,则更改行中一列中的值,然后输出该行

我可以看到,程序在内部循环的第一次迭代后就停止了,但我不明白为什么会这样

我对csv没有经验,但我想,一旦你迭代到最后一行,读者就会精疲力竭,然后你需要重新启动它再次迭代。因此,在内部循环中使用reader1之前,您可能应该尝试重新分配reader1:

for row2 in reader2:
    reader1 = csv.DictReader(open('my.csv'), ...)
    for row1 in reader1:
我对csv没有经验,但我想,一旦您迭代到最后一行,读者就会精疲力竭,然后您需要重新启动它以再次迭代。因此,在内部循环中使用reader1之前,您可能应该尝试重新分配reader1:

for row2 in reader2:
    reader1 = csv.DictReader(open('my.csv'), ...)
    for row1 in reader1:
reader1和reader2是包装在csv读取器中的文件对象。这些迭代器在文件结束之前只能读取一次,因此下一个for循环没有什么可做的

解决方案:

将文件读入列表并使用该列表刷新读写器:

更好的是,将该csv文件读入字典列表一次,这样应该更快:

reader1 = list(csv.DictReader(myfile))
for row2 in reader2:
    for row1 in reader1:
        # etc.
reader1和reader2是包装在csv读取器中的文件对象。这些迭代器在文件结束之前只能读取一次,因此下一个for循环没有什么可做的

解决方案:

将文件读入列表并使用该列表刷新读写器:

更好的是,将该csv文件读入字典列表一次,这样应该更快:

reader1 = list(csv.DictReader(myfile))
for row2 in reader2:
    for row1 in reader1:
        # etc.

谢谢你,蒂姆。现在运行它可能需要一段时间,但至少它还在运行,所以这是一个非常好的迹象。一旦完成,一定会让您和这里的其他人知道它是否有效。这非常有效,这是一个极好的解决方案。谢谢你,谢谢蒂姆。现在运行它可能需要一段时间,但至少它还在运行,所以这是一个非常好的迹象。一旦完成,一定会让您和这里的其他人知道它是否有效。这非常有效,这是一个极好的解决方案。谢谢。这可以通过使用with语句来改进-就目前而言,my.csv永远不会关闭。这可以通过使用with语句来改进-就目前而言,my.csv永远不会关闭。