Python不参与

Python不参与,python,for-loop,Python,For Loop,为什么不在第二秒内访问unique[1]??? unique是一个字符串数组 import csv with open('file.csv', 'rb') as f: reader = csv.reader(f) for i in range(len(unique)): # print unique[i] #prints all the items in the array for row in r

为什么不在第二秒内访问unique[1]??? unique是一个字符串数组

import csv
with open('file.csv', 'rb') as f:
        reader = csv.reader(f)
        for i in range(len(unique)):
         #   print unique[i]   #prints all the items in the array        
            for row in reader:
                print unique[i] # always prints the first item unique[0]
                if row[1]==unique[i]:        
                    print row[1], row[0] # prints only the unique[0] stuff

谢谢

我认为浏览一下程序流程会很有用

首先,它将分配
i=0
,然后它将读取整个CSV文件,为CSV文件中的每一行打印
unique[0]
,然后在完成读取CSV文件后,它将进入第二次迭代,分配
i=1
,然后由于程序已完成读取文件,它不会为reader:中的行输入
,因此退出循环

进一步澄清
csv.reader(f)
在您对reader
中的行执行
操作之前,不会真正读取该文件,并且在此之后,它就没有什么可读取的了。如果要多次读取该文件,请先将其读入列表,如下所示:

import csv
with open('file.csv', 'rb') as f:
        reader = csv.reader(f)
        rows = [row for row in reader]
        for i in range(len(unique)):
            for row in rows:
                print unique[i]
                if row[1]==unique[i]:        
                    print row[1], row[0]

我认为如果将嵌套结构更改为:

import csv
res = {}
for x in unique:
    res[x] = []
with open('file.csv', 'rb') as f:
        reader = csv.reader(f)
        for row in reader:
            for i in range(len(unique)):
             #   print unique[i]   #prints all the items in the array        
                if row[1]==unique[i]:  
                    res[unique[i]].append([row[1],row[0]])      
                    #print row[1], row[0] # prints only the unique[0] stuff
for x in unique:
    print res[x]

对于范围内的i(len(unique)):
unique[i]
您应该将
替换为
,对于unique:
项中的项。几乎没有例外,在同样的情况下,您不应该编写
range(len(x))
@chrismorge。第二条中只有第一条,我不是建议把它作为问题的解决方案,而是作为一般性的建议。里赫特?那么在你看来,我该如何解决这个问题呢??谢谢@justhalf@Alberto:文件和CSV读取器是懒惰的,这节省了内存,但也意味着您只能通过一次文件。因此,在这种情况下,您的解决方案是什么?这取决于您想要什么。如果您真的想为
unique
数组中的每个元素打印整个CSV文件,那么我编辑的答案将回答您的问题。否则,@bveb333的答案可能就是你想要的。这正是我想要的!谢谢你,这东西坏了。我需要在行中查找每个项目的唯一性,而不是相反。很抱歉