2014-02-03 2 views
4

Мне нужно читать только каждую вторую строку файла (что очень большое), поэтому я не хочу использовать readlines(). Я не уверен, как реализовать итератор, поэтому любые предложения приветствуются. Одна из возможностей состоит в том, чтобы вызвать next() дважды. Не очень привлекательно.Как читать только каждую вторую строку файла?

with open(pth_file, 'rw') as pth: 
     pth.next() 
     for i,row in enumerate(pth): 
      # do stuff with row 
      pth.next() 

Или создать свой собственный итератор, как

for i, row in enumerate(pth): 
    if i... 
+0

На самом деле, вы бы только позвонить 'pth.next' один раз внутри этого цикла, поскольку сам цикл также читает каждую строку каждый раз. –

+0

Ehm, правда. На самом деле мне нужно читать каждую третью строку. – LarsVegas

ответ

8

Использование itertools.islice:

import itertools 

with open(pth_file) as f: 
    for line in itertools.islice(f, 1, None, 2): 
     # 1: from the second line ([1]) 
     # None: to the end 
     # 2: step 

     # Do something with the line 
+0

О, это выглядит многообещающе. – LarsVegas

1

Вы можете использовать собственный итератор:

def iterate(pth): 
    for i, line in enumerate(pth, 1): 
     if not i % 2: 
      yield line 
Смежные вопросы