Вы можете использовать альтернативную форму iter()
, где вы передаете iter()
функцию, и она будет продолжать вызывать эту функцию, пока не увидит значение (2-й аргумент). Вы можете использовать это, чтобы пропустить, пока не увидите [PROFILE]\n
, а затем использовать ту же самую форму iter()
для чтения до [VALUES]\n
. Эта функция вызывается только next(iterable)
, то есть iterable.__next__
, например ::100100
with open(name) as f:
for _ in iter(f.__next__, '[PROFILE]\n'): # Skip until PROFILE
pass
yvec1 = [int(d) for d in iter(f.__next__, '[VALUES]\n')]
yvec1
теперь будет содержать все значения от [PROFILE]
до [VALUES]
.
Альтернативный и потенциально более быстрый способ потребления первого iter()
состоит в использовании collections.deque()
вместо цикла for
, но это может привести к чрезмерному уничтожению этой проблемы, например ::
deque(iter(f.__next__, '[PROFILE]\n'), maxlen=0)
Примечание: использование with
автоматически приведет к close(f)
в конце блока.