2016-05-28 7 views
1

Я регулярно использую питон читать два или несколько файлов одновременно следующим образом:с помощью языка Python «с» в то время как чтение двух файлов одновременно с izip

for line1, line2 in izip(open(file1),open(file2)): 
    do something with line1 and line2 

(с использованием izip из пакета itertools, потому что файлы я m, огромны, и я не хочу загружать весь файл в память).

Я недавно был преобразован в использовании with при чтении файлов, которые, по-видимому лучше, так как он закрывает все открытые файлы, если ваша программа падает (по крайней мере, это то, что я понял из обсуждения здесь и в других местах):

with open(filename) as fh: 
    for line in fh: 
     do something with line 

Однако я не могу понять, как объединить эти два метода. При попытке использовать izip в этом контексте говорится: 'itertools.izip' object has no attribute '__exit__', который я интуитивно понятен, является причиной того, почему использование with настолько мощно.

Итак, есть ли способ использовать izip с with?

ответ

1

Вы пнуть себя, когда вы видите, как это и очевидно:

with open(fname1) as f1, open(fname2) as f2: 
    for line1, line2 in izip(f1, f2): 
     ... 
+0

Я получаю сообщение об ошибке: 'с открытыми (имена [0]) как f1, открытые (имена [1]), как f2: SyntaxError: недействительный синтаксис' (обратите внимание, что по какой-либо причине ошибка синтаксиса, по-видимому, подбирает запятую) – lstbl

+1

Ну, я не могу объяснить, что синтаксис верен. Проверьте предыдущую строку на наличие ошибок, иногда парсер отключает ее. – wim

+0

Да, это странно, тот же код работает на другой машине ... Знаете ли вы, есть ли какая-либо зависимость от версии python? Кажется, он работает с python 2.7, но не на машине под управлением python 2.6 – lstbl