【问题标题】:python nested for loop only executes once [duplicate]python嵌套for循环只执行一次[重复]
【发布时间】:2015-07-10 08:53:35
【问题描述】:

我有 2 个 csv 文件。我在一个 csv 中获取一个单元格的值,并与另一个中的所有单元格进行比较。以下是我的代码:

f = open('test1.csv')
x = open('test2.csv')

csv_f = csv.reader(f)
csv_x = csv.reader(x)

for row in csv_f:
    a = row[1]
    b = row[2]
    for nrow in csv_x:
        if a in nrow[0] and b in nrow[1]:
           print nrow[0]

现在上面的代码只打印 a 和 b 的第一个值。随后,对于 a 和 b 的其他值,它不会通过第二个 for 循环。知道有什么问题吗?

【问题讨论】:

  • 问题是@anand 的答案比我的还要好,因为只有在文件很大时才能使用我的文件,它才必须读取文件

标签: python csv


【解决方案1】:

功能

csv_x = csv.reader(x)

返回一个文件对象。

当你循环到最后时。

所以你不能再循环一遍

要解决这个问题,您可以使用这种方式

f = open('test1.csv')


csv_f = csv.reader(f)


for row in csv_f:
    a = row[1]
    b = row[2]
    csv_x = csv.reader(open('test2.csv')) # assign here
    for nrow in csv_x:
        if a in nrow[0] and b in nrow[1]:
           print nrow[0]

【讨论】:

    【解决方案2】:

    是的,正确,因为在第一个循环之后,创建 csv 阅读器 csv_x 的文件 x 位于文件末尾,并且没有更多行可以从中读取,所以它不会在第一次循环后再次遍历它。

    对于第二个文件,(为了性能),您可以考虑使用简单文件,然后在开始任何循环之前创建一个列表,这样您就不必一次又一次地读取同一个文件。

    例子-

    f = open('test1.csv')
    x = open('test2.csv')
    
    csv_x = csv.reader(x)
    xlist = [i for i in csv_x] #If your csv is delimited by ',' , which I am guessing it is. 
    
    csv_f = csv.reader(f)
    
    for row in csv_f:
        a = row[1]
        b = row[2]
        for nrow in xlist:
            if a in nrow[0] and b in nrow[1]:
               print nrow[0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 2016-11-22
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      相关资源
      最近更新 更多