Python,嵌套for循环

标签 python csv for-loop

我是 python 的新手,我在实现嵌套的“for 循环”时遇到困难。这可能很简单,但我尝试的以下示例代码并没有给我预期的结果。我的任务实际上是从属性表(ArcGIS 要素数据)中读取记录并将其与 CSV 文件中的每条记录进行比较。但最初我尝试对 2 个 CSV 文件执行相同的操作,然后将类似的逻辑应用于我原来的问题。我正在尝试弄清楚循环的工作原理,稍后我可以添加比较条件。任何帮助是极大的赞赏。谢谢。

想法是文件 1(CSV) 中的第一行将自身与文件 2(CSV) 中的所有行(逐行)进行比较,然后文件 1 中的第二行执行相同的操作,直到文件 1 的每一行都进行比较本身到文件 2 中的所有行。所以在预期的结果中,我试图查看是否对于文件 1 中的每一行,是否考虑了文件 2 中的每一行。

例子:

**File 1   File 2**
ALPHA      All
BETA       Bell
GAMMA      Cell
DELTA      Dell
ITA 

示例代码:

import csv, sys, os, string 
table1 = os.path.join(path, 'table1.csv')
table2 = os.path.join(path, 'table2.csv')
file1 = csv.reader(open(table1, 'r'))
file2 = csv.reader(open(table2, 'r'))
for row in file1:
    print row
    for prow in file2:
        print prow

预期结果:

   ALPHA
    All
    Bell
    Cell
    Dell

    BETA
    All 
    …..

    ITA

All
..
Dell

最佳答案

这里的问题是,file2 is just a one-shot iterator .因此,在 file2 迭代一次后(在 file1 的第一次迭代中),您完全耗尽了数据。

相反,您必须将 file2 的内容存储在列表中:

file2=list(csv.reader(open(table2,'r')))
for row in file1:
     print row
     for prow in file2:
         print prow

这将为您打印一些列表,所有列表仅包含一个元素,即相应行的第一个单元格。这是由于将文件解析为 CSV。每次迭代都会为您提供行中的单元格列表。

关于Python,嵌套for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11210507/

相关文章:

python - 如何在另一个函数中使用 QDateEdit 小部件中设置的用户值?

python - ORM 中创建类和调用类的区别

python - 使用 self.sender() 检查 PyQt QPushButton 是否被检查

Python:islice 的性能问题

python - 如何并行遍历两个列表?

有人可以帮我解释一下这段C代码吗?

python - 在一张 table 上创建多对多

python - 为什么我的硬编码数据没有写入文件?

python - 循环遍历相应的行并更改数据框的值

java - 理解多个for循环之间的相互关系