Python未进入for循环

0 投票
2 回答
4760 浏览
提问于 2025-04-17 23:56

为什么在第二个for循环中从来没有访问过unique这个数组呢?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

谢谢你

2 个回答

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]
0

我觉得了解程序的运行流程会很有帮助。

首先,它会把 i=0 这个值赋给变量 i,然后它会读取整个 CSV 文件,并且会把 CSV 文件中每一行的 unique[0] 打印出来。等到它完成读取 CSV 文件后,就会进入第二次循环,这时会把 i=1 赋值给 i。因为程序已经读完了文件,所以它不会再进入 for row in reader: 这个循环,最后就会退出这个循环。

进一步说明

csv.reader(f) 实际上不会读取文件,直到你执行 for row in 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]

撰写回答