На самом деле вам не нужно вызывать readline
, достаточно просто перебрать файл. Вы можете использовать функцию zip
для перегруппировки линий. Таким образом, общее решение будет выглядеть как
for odd_line,even_line in zip(infile, infile):
# Do something
Если вы хотите сначала создать список всех четных и нечетных строк (и это редко бывает хорошей структурой данных), вы можете просто добавить список, например, так:
odd_lines = []
even_lines = []
for odd_line,even_line in zip(infile, infile):
odd_lines.append(odd_line)
even_lines.append(even_line)
В качестве альтернативы используйте
lines = list(infile)
, чтобы получить список всех строк, а затем ломтиками , чтобы извлечь часть файла. Например,
even_lines = lines[1::2]
Другой альтернативой является использование итератора с циклом while
. Просто позвоните next
несколько раз. Например, это печатает все нечетные строки:
iterator = iter(infile)
while True:
try:
odd_line = next(iterator)
print(odd_line)
even_line = next(iterator)
except StopIteration:
break
Если вы не хотите использовать break
(а это crazy ), вы можете просто перехватить исключение вне цикла:
iterator = iter(infile)
try:
while True:
odd_line = next(iterator)
print(odd_line)
even_line = next(iterator)
except StopIteration:
pass # end of file reached
Вместо использования итератора вы также можете использовать readline
:
odd_lines = []
even_lines = []
while True:
line = infile.readline()
if not line: # End of file reached
break
odd_lines.append(line)
line = infile.readline()
if not line: # End of file reached
break
even_lines.append(line)
Опять же, если вы действительно не можете использовать break
заявления, вы можете подделать их:
odd_lines = []
even_lines = []
go_on = True
while go_on:
line = infile.readline()
if even_line:
odd_lines.append(line)
line = infile.readline()
if line:
even_lines.append(line)
else:
go_on = False