Python不参与
为什么不在第二秒内访问unique[1]??? unique是一个字符串数组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
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的答案可能就是你想要的。这正是我想要的!谢谢你,这东西坏了。我需要在行中查找每个项目的唯一性,而不是相反。很抱歉