Я пытался найти ответ на этот вопрос, но, похоже, не могу точно определить источник моей проблемы. Если бы на этот вопрос ответили в другом месте, я был бы признателен, если бы вы могли уделить минутку, чтобы объяснить, что мне не хватает.
В принципе, я думал, что вы могли бы сделать что-то вроде этого:
ref = open(ref_file)
with ref:
for row in ref:
break
with ref:
for row in ref:
print(row)
Поскольку я использовал оператор break
в первом цикле, я подумал, что он остановит итератор, поставит паузу на чтение файла, а затем я смог продолжить со второго цикла. Это не так - вместо этого я получаю сообщение об ошибке, в котором говорится, что я пытаюсь работать с закрытым файлом. Я обдумал это и пришел к выводу, что, возможно, оператор with
- это то, что подталкивает итератор к EOF. Итак, я попробовал это:
with ref:
for row in ref:
break
for row in ref:
print(row)
Казалось, это работает как ожидалось. Потрясающие. Итак, следующее, что я попробовал, это:
with ref:
for i in range(0,10):
for row in vcf:
break
for row in vcf:
print(row)
То, что я ожидал бы здесь произойти, это, по сути, печатать чередующиеся строки до тех пор, пока диапазон 0,10
не будет исчерпан. Вместо этого я печатаю вторую строку файла, и она останавливается.
Есть ли лучший способ запретить итератору достигать EOF? Что мне не хватает? Я как-то вырываюсь из утверждения with и упускаю суть?
EDIT:
Хорошо, последний пример не является примером проблемы, с которой я столкнулся.
with ref:
for i in range(0,10):
for row in vcf:
break
for row in vcf:
print(row)
break
Это работает как ожидалось ... Что на самом деле заставляет меня думать, что я что-то упустил в своем реальном коде. Я все еще буду благодарен за комментарии о лучших способах предотвращения достижения EOF итератором.