Using itertools.dropwhile , itertools.takewhile , itertools.islice :
import itertools with open('data.txt') as f, open('result.txt', 'w') as fout: it = itertools.dropwhile(lambda line: line.strip() != 'Start', f) it = itertools.islice(it, 1, None) it = itertools.takewhile(lambda line: line.strip() != 'End', it) fout.writelines(it)
UPDATE . As inspector G4dget commented, the code above the code copies the first block. To copy multiple blocks, use the following command:
import itertools with open('data.txt', 'r') as f, open('result.txt', 'w') as fout: while True: it = itertools.dropwhile(lambda line: line.strip() != 'Start', f) if next(it, None) is None: break fout.writelines(itertools.takewhile(lambda line: line.strip() != 'End', it))
source share