2011-12-11 40 views
1

我試圖用「izip」從兩個文件同時讀取線同時,卻得到了類似下面的錯誤:使用izip讀取兩個文件行蟒蛇

>>> f1=open('/home/xug/scratch/test/test_1.fastq','r') 
>>> f2=open('/home/xug/scratch/test/test_2.fastq','r') 
>>> from itertools import izip 
>>> for i,line1,line2 in izip(f1,f2): 
...  if i%4==3: 
...  print line1,line2 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 2 values to unpack 

我不知道爲什麼....什麼是「需要超過2個值」? thx

+0

如果您需要迭代所有行並且文件長度不等,您可能需要使用'itertools.izip_longest(f1,f2)' –

回答

7

izip()簡單地將兩個迭代對拉到一對。它不會引入額外的計數器,正如您所期望的那樣。嘗試使用enumerate()

for i, (line1, line2) in enumerate(izip(f1, f2)): 
    ... 

也得到該計數器。

錯誤消息是由於嘗試將迭代器的第一項分配給i, line1, line2而導致的。由於第一項是一對字符串,說s1s2,這個任務將是實質上等同於

i, line1, line2 = s1, s2 

這將顯然需要兩個以上的值來解壓。 (準確地說,它需要三個)。

+2

+1 OP正在嘗試做。 –