@classmethod
def parse(cls, fp, data_objects=None, close=True, split_columns=True, **
    fmt_params):
    """
            Files are sniffed for the used csv dialect, but an optional set of
            formatting parameters can be passed that will override the sniffed
            parameters.
        """
    filename, f, close = cls._get_file(fp, close=close)
    fmt_params, has_header, file_start = cls.sniff(f, **fmt_params)
    data_objects = cls._parse_header(filename, f, data_objects=data_objects,
        split_columns=split_columns, has_header=has_header, file_start=
        file_start, **fmt_params)
    data_objects = cls._parse_data(filename, f, data_objects=data_objects,
        split_columns=split_columns, has_header=has_header, **fmt_params)
    if close:
        f.close()
    return data_objects
