我是 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/