Monday, May 11, 2009

Avoiding "peek" with "itertools.chain"

Sometimes you need to filter out some header information. However the only clear anchor you have is the start of real data - you need a "peek" function.

It's easy to avoid writing the "peek" logic, just use itertools.chain.

#!/usr/bin/env python
'''Avoiding the need for "peek" with itertools.chain'''

from itertools import chain

def is_first_data(line):
return line.startswith("Name:")

def skip_header(data):
data = iter(data)
for line in data:
if is_first_data(line):
return chain([line], data)

# FIXME: We might want to raise something here
return []


if __name__ == "__main__":
data = [
"this is the header",
"it might change every time",
"and you'll never find a good regexp for it",
"The first line of data is easy to know",
"Name: Duffy",
"Type: Duck",
"Anger: 10",
"",
"Name: Bugs",
"Type: Bunny",
"Anger: 0",
]

data = skip_header(data)
for line in data:
print line

No comments:

Post a Comment