Пример #1
0
def parse_file(lines, require_order=None):
    """
    >>> lines = ['# q:str ans:str s:int c:int rel:float\\n', 'url\\tph\\t1000\\t15\\t1.2\\n']
    >>> list(parse_file(lines))
    [Rec(q='url', ans='ph', s=1000, c=15, rel=1.2)]
    """
    lines_iter = iter(lines)
    header = list(islice(lines_iter, 1))
    if len(header) == 1:
        data_desc = parse_header(header[0])
        if require_order:
            if not data_desc.order.is_ordered_by(parse_header_order(require_order)):
                raise Exception("require_order check of {0} failure on {1}.".format(require_order, data_desc.order))
        field_spec = []
        for field in data_desc.fields:
            field_spec.append((field.name, TYPE_MAP[field.type]))
        parser = FileParser(field_separator="\t", rec_parser=RecParser(field_spec))
        return ParsedFile(data_desc, parser(lines_iter))
    else:
        raise Exception("No header")
Пример #2
0
 def desc(self):
     return parse_header(self.header)