view numerics/convert.py @ 58:537fba7c9def

stubbing
author Jeff Hammel <k0scist@gmail.com>
date Tue, 20 Jan 2015 16:44:56 -0800
parents 06e487f90e05
children 3781174542bb
line wrap: on
line source

#!/usr/bin/env python

"""
convert between types
"""

# imports
import argparse
import csv
import sys
from .data import transpose
from .read import read_csv, CSVParser

__all__ = ['cast', 'float_or_orig', 'main']

default_cast = (int, float, str)

def cast(to_type, *values):

    retval = []
    for value in values:
        try:
            retval.append(to_type(value))
        except ValueError:
            retval.append(value)
    return retval


def float_or_orig(*values):
    return cast([float], *values)


def column_type(values, types=default_cast):
    """determine the type of a column"""
    for t in types:
        for value in values:
            try:
                t(value)
            except ValueError, TypeError:
                break
        else:
            return t

    raise NotImplementedError('TODO') # -> record TODO items

def cast_columns(values, to=default_cast):
    """
    cast a column of data
    """
    raise NotImplementedError('TODO') # -> record TODO items

def main(args=sys.argv[1:]):
    """CLI"""

    # parse command line
    parser = CSVParser(description="interpolate types from file")
    options = parser.parse_args(args)

    # read CSV file
    data = parser.read()

    # transpose
    columns = transpose(data)

    # get types
    types = [column_type(column) for column in columns]

    # print type information
    writer = csv.writer(sys.stdout)
    writer.writerow([t.__name__ for t in types])


if __name__ == '__main__':
    main()