我不明白为什么这不起作用-我的循环在第一次迭代中运行得很好,但后来停止了-print x[0]每次都能工作,但是下一个嵌套的for循环只在第一次运行。。。有什么想法吗?在
csv_reader=csv.reader(guuids, delimiter='\t')
matrix_reader=csv.reader(matrix, delimiter='\t')
for line in csv_reader:
x = line
print x[0]
for mline in matrix_reader:
if x[0] in mline[0] or x[0] in mline[1]:
out.append(mline)
Python中的许多iterable对象(可以放在for循环中
in
之后的对象)只能迭代一次。在那之后,它们就完成了;它们不能回到开头,任何进一步的迭代尝试都将表现为它们不包含任何内容。一个csv.reader
对象就是其中的一个例子:在第一次外循环迭代中,您遍历matrix_reader
可以提供的所有可用记录。这就是为什么,下一次代码转到那一行时,matrix_reader
看起来好像是空的。在也许解决这个问题最简单的方法是在每次要迭代它时生成一个新的
matrix_reader
。是这样的:要理解为什么
csv.reader
在浏览一次之后就会耗尽,您应该知道csv.reader
并不代表CSV文件。实际上,尽管它的名字,它实际上更像是一个“转换器”:它从某个源获取文本行,可以是任何内容,然后逐个将它们转换成列表。当读者转换了一行字之后,它就会忘记它。这使得reader对象可以在不占用大量内存的情况下处理数百万行。在这种方法的折衷是reader对象不能返回到它以前处理过的行,除非它能够以某种方式告诉它的文本源返回并重复上一行。但不能保证潜在来源能做到这一点。例如,如果源代码是其他程序的输出,则不能让程序返回并重复原来的输出行。或者,如果源是通过互联网传输的文本,则不一定要让它重复之前流过的行。所以读者不能指望能够访问旧的行,这就是为什么,当它到达最后一行时,唯一合理的行为就是让它表现得好像什么都没有了。在
相关问题 更多 >
编程相关推荐