def infer_delimiter(filename, comment_char="#", n_lines=3):
    """
    Given a file which contains data separated by one of the following:
        - commas
        - tabs
        - spaces
    Return the most likely separator by sniffing the first few lines
    of the file's contents.
    """
    lines = []
    with open(filename, "r") as f:
        for line in f:
            if line.startswith(comment_char):
                continue
            if len(lines) < n_lines:
                lines.append(line)
            else:
                break
    if len(lines) < n_lines:
        raise ValueError(
            "Not enough lines in %s to infer delimiter" % filename)
    candidate_delimiters = ["\t", ",", "\s+"]
    for candidate_delimiter in candidate_delimiters:
        counts = [len(re.split(candidate_delimiter, line)) for line in lines]
        first_line_count = counts[0]
        if all(c == first_line_count for c in counts) and first_line_count > 1:
            return candidate_delimiter
    raise ValueError("Could not determine delimiter for %s" % filename)
def infer_delimiter ( filename , comment_char = "#" , n_lines = 3 ) : lines = [ ] with open ( filename , "r" ) as f : for line in f : if line . startswith ( comment_char ) : continue if len ( lines ) < n_lines : lines . append ( line ) else : break if len ( lines ) < n_lines : raise ValueError ( "Not enough lines in %s to infer delimiter" % filename ) candidate_delimiters = [ "\t" , "," , "\s+" ] for candidate_delimiter in candidate_delimiters : counts = [ len ( re . split ( candidate_delimiter , line ) ) for line in lines ] first_line_count = counts [ 0 ] if all ( c == first_line_count for c in counts ) and first_line_count > 1 : return candidate_delimiter raise ValueError ( "Could not determine delimiter for %s" % filename )
Given a file which contains data separated by one of the following:
        - commas
        - tabs
        - spaces
    Return the most likely separator by sniffing the first few lines
    of the file's contents.