Используйте izip для чтения строк из двух файлов одновременно в python - PullRequest
1 голос
/ 11 декабря 2011

Я пытаюсь использовать '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

Я не знаю почему .... что такое "нужно больше двух значений"? ТНХ

1 Ответ

7 голосов
/ 11 декабря 2011

izip() просто объединяет две итерируемые пары. Это не вводит дополнительный счетчик, как вы, вероятно, ожидаете. Попробуйте использовать enumerate()

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

, чтобы также получить этот счетчик.

Сообщение об ошибке появляется в результате попытки присвоить первому элементу вашей итерации значение i, line1, line2. Поскольку первый элемент представляет собой пару строк, скажем, s1 и s2, это назначение будет по существу эквивалентно

i, line1, line2 = s1, s2

, для которого явно требуется более двух значений для распаковки. (Точнее, потребуется три.)

...