def from_csv(cls, dir_path, column_info, header=True, **kwargs): """ Create a new :class:`TableSet` from a directory of CSVs. This method will use csvkit if it is available, otherwise it will use Python's builtin csv module. ``kwargs`` will be passed through to :meth:`csv.reader`. If you are using Python 2 and not using csvkit, this method is not unicode-safe. :param dir_path: Path to a directory full of CSV files. All CSV files in this directory will be loaded. :param column_info: See :class:`.Table` constructor. :param header: If `True`, the first row of the CSV is assumed to contains headers and will be skipped. """ from agate.table import Table if not os.path.isdir(dir_path): raise IOError( 'Specified path doesn\'t exist or isn\'t a directory.') tables = OrderedDict() for path in glob(os.path.join(dir_path, '*.csv')): name = os.path.split(path)[1].strip('.csv') table = Table.from_csv(path, column_info, header=header, **kwargs) tables[name] = table return TableSet(tables)
def from_csv(cls, dir_path, column_names=None, column_types=None, row_names=None, header=True, **kwargs): """ Create a new :class:`TableSet` from a directory of CSVs. See :meth:`.Table.from_csv` for additional details. :param dir_path: Path to a directory full of CSV files. All CSV files in this directory will be loaded. :param column_names: See :meth:`Table.__init__`. :param column_types: See :meth:`Table.__init__`. :param row_names: See :meth:`Table.__init__`. :param header: See :meth:`Table.from_csv`. """ if not os.path.isdir(dir_path): raise IOError('Specified path doesn\'t exist or isn\'t a directory.') tables = OrderedDict() for path in glob(os.path.join(dir_path, '*.csv')): name = os.path.split(path)[1].strip('.csv') tables[name] = Table.from_csv(path, column_names, column_types, row_names=row_names, header=header, **kwargs) return TableSet(tables.values(), tables.keys())
def from_csv(cls, dir_path, column_names=None, column_types=None, row_names=None, header=True, **kwargs): """ Create a new :class:`TableSet` from a directory of CSVs. See :meth:`.Table.from_csv` for additional details. :param dir_path: Path to a directory full of CSV files. All CSV files in this directory will be loaded. :param column_names: See :meth:`Table.__init__`. :param column_types: See :meth:`Table.__init__`. :param row_names: See :meth:`Table.__init__`. :param header: See :meth:`Table.from_csv`. """ if not os.path.isdir(dir_path): raise IOError('Specified path doesn\'t exist or isn\'t a directory.') tables = OrderedDict() for path in glob(os.path.join(dir_path, '*.csv')): name = os.path.split(path)[1].strip('.csv') tables[name] = Table.from_csv(path, column_names, column_types, row_names=row_names, header=header, **kwargs) return TableSet(tables.values(), tables.keys())
def test_table_from_csv(self): import csvkit from agate import table table.csv = csvkit if six.PY2: table = Table.from_csv('examples/test.csv', self.tester, encoding='utf8') else: table = Table.from_csv('examples/test.csv', self.tester) self.assertSequenceEqual(table.get_column_names(), ['one', 'two', 'three']) self.assertSequenceEqual(tuple(map(type, table.get_column_types())), [Number, Number, Text]) self.assertEqual(len(table.columns), 3) self.assertSequenceEqual(table.rows[0], [1, 4, 'a']) self.assertSequenceEqual(table.rows[1], [2, 3, 'b']) self.assertSequenceEqual(table.rows[2], [None, 2, u'👍'])
def from_csv(cls, dir_path, column_info, row_names=None, header=True, **kwargs): """ Create a new :class:`TableSet` from a directory of CSVs. This method will use csvkit if it is available, otherwise it will use Python's builtin csv module. ``kwargs`` will be passed through to :meth:`csv.reader`. If you are using Python 2 and not using csvkit, this method is not unicode-safe. :param dir_path: Path to a directory full of CSV files. All CSV files in this directory will be loaded. :param column_info: A sequence of pairs of column names and types. The latter must be instances of :class:`.DataType`. Or, an instance of :class:`.TypeTester` to infer types. :param row_names: See :meth:`Table.__init__`. :param header: If `True`, the first row of the CSV is assumed to contains headers and will be skipped. """ use_inference = isinstance(column_info, TypeTester) if use_inference and not header: raise ValueError( 'Can not apply TypeTester to a CSV without headers.') if not os.path.isdir(dir_path): raise IOError( 'Specified path doesn\'t exist or isn\'t a directory.') tables = OrderedDict() if use_inference: has_inferred_columns = False for path in glob(os.path.join(dir_path, '*.csv')): name = os.path.split(path)[1].strip('.csv') table = Table.from_csv(path, column_info, row_names=row_names, header=header, **kwargs) if use_inference and not has_inferred_columns: column_info = tuple(zip(table.column_names, table.column_types)) has_inferred_columns = True tables[name] = table return TableSet(tables.values(), tables.keys())
def test_table_from_csv(self): table = Table.from_csv('examples/test.csv', self.tester) self.assertSequenceEqual(table.column_names, ['one', 'two', 'three']) self.assertSequenceEqual(tuple(map(type, table.column_types)), [Number, Number, Text]) self.assertEqual(len(table.columns), 3) self.assertSequenceEqual(table.rows[0], [1, 4, 'a']) self.assertSequenceEqual(table.rows[1], [2, 3, 'b']) self.assertSequenceEqual(table.rows[2], [None, 2, u'👍'])
def test_table_from_csv(self): table = Table.from_csv('examples/test.csv', column_types=self.tester) self.assertSequenceEqual(table.column_names, ['one', 'two', 'three']) self.assertSequenceEqual(tuple(map(type, table.column_types)), [Number, Number, Text]) self.assertEqual(len(table.columns), 3) self.assertSequenceEqual(table.rows[0], [1, 4, 'a']) self.assertSequenceEqual(table.rows[1], [2, 3, 'b']) self.assertSequenceEqual(table.rows[2], [None, 2, u'👍'])
def test_table_from_csv(self): import csvkit from agate import table table.csv = csvkit if six.PY2: table = Table.from_csv('examples/test.csv', self.tester, encoding='utf8') else: table = Table.from_csv('examples/test.csv', self.tester) self.assertSequenceEqual(table.column_names, ['one', 'two', 'three']) self.assertSequenceEqual(tuple(map(type, table.column_types)), [Number, Number, Text]) self.assertEqual(len(table.columns), 3) self.assertSequenceEqual(table.rows[0], [1, 4, 'a']) self.assertSequenceEqual(table.rows[1], [2, 3, 'b']) self.assertSequenceEqual(table.rows[2], [None, 2, u'👍'])
def from_csv(cls, dir_path, column_info, header=True, **kwargs): """ Create a new :class:`TableSet` from a directory of CSVs. This method will use csvkit if it is available, otherwise it will use Python's builtin csv module. ``kwargs`` will be passed through to :meth:`csv.reader`. If you are using Python 2 and not using csvkit, this method is not unicode-safe. :param dir_path: Path to a directory full of CSV files. All CSV files in this directory will be loaded. :param column_info: A sequence of pairs of column names and types. The latter must be instances of :class:`.DataType`. Or, an instance of :class:`.TypeTester` to infer types. :param header: If `True`, the first row of the CSV is assumed to contains headers and will be skipped. """ from agate.table import Table use_inference = isinstance(column_info, TypeTester) if use_inference and not header: raise ValueError('Can not apply TypeTester to a CSV without headers.') if not os.path.isdir(dir_path): raise IOError('Specified path doesn\'t exist or isn\'t a directory.') tables = OrderedDict() if use_inference: has_inferred_columns = False for path in glob(os.path.join(dir_path, '*.csv')): name = os.path.split(path)[1].strip('.csv') table = Table.from_csv(path, column_info, header=header, **kwargs) if use_inference and not has_inferred_columns: column_info = tuple(zip(table.get_column_names(), table.get_column_types())) has_inferred_columns = True tables[name] = table return TableSet(tables)
def from_csv(cls, dir_path, column_info, row_names=None, header=True, **kwargs): """ Create a new :class:`TableSet` from a directory of CSVs. See :meth:`.Table.from_csv` for additional details. :param dir_path: Path to a directory full of CSV files. All CSV files in this directory will be loaded. :param column_info: A sequence of pairs of column names and types. The latter must be instances of :class:`.DataType`. Or, an instance of :class:`.TypeTester` to infer types. :param row_names: See :meth:`Table.__init__`. :param header: If `True`, the first row of the CSV is assumed to contains headers and will be skipped. """ use_inference = isinstance(column_info, TypeTester) if use_inference and not header: raise ValueError('Can not apply TypeTester to a CSV without headers.') if not os.path.isdir(dir_path): raise IOError('Specified path doesn\'t exist or isn\'t a directory.') tables = OrderedDict() if use_inference: has_inferred_columns = False for path in glob(os.path.join(dir_path, '*.csv')): name = os.path.split(path)[1].strip('.csv') table = Table.from_csv(path, column_info, row_names=row_names, header=header, **kwargs) if use_inference and not has_inferred_columns: column_info = tuple(zip(table.column_names, table.column_types)) has_inferred_columns = True tables[name] = table return TableSet(tables.values(), tables.keys())