def create_table(self, data=None): """Create Table object from data. Data can be a combination of various iterable containers, e.g. list of lists, list of dicts, dict of lists. :param data: source data for table """ table = Table(data) self.logger.info("Created table: %s", table) notebook_table(table) return table
def create_table(self, data=None, trim=False): """Create Table object from data. Data can be a combination of various iterable containers, e.g. list of lists, list of dicts, dict of lists. :param data: source data for table :param trim: remove all empty rows from the end of the worksheet, default `False` """ table = Table(data) self.logger.info("Created table: %s", table) if trim: self.trim_empty_rows(table) self.trim_column_names(table) notebook_table(self.table_head(table, 10)) return table
def read_table_from_csv(self, path, header=None, columns=None, dialect=None, delimiters=None): """Read a CSV file as a table. By default attempts to deduce the CSV format and headers from a sample of the input file. If it's unable to determine the format automatically, the dialect and header will have to be defined manually. Valid ``dialect`` values are ``excel``, ``excel-tab``, and ``unix``, and ``header`` is boolean argument (``True``/``False``). Optionally a set of valid ``delimiters`` can be given as a string. The ``columns`` argument can be used to override the names of columns in the resulting table. The amount of columns must match the input data. :param path: path to CSV file :param header: CSV file includes header :param columns: names of columns in resulting table :param dialect: format of CSV file :param delimiters: string of possible delimiters """ sniffer = csv.Sniffer() with open(path, newline="") as fd: sample = fd.read(1024) if dialect is None: dialect = sniffer.sniff(sample, delimiters) if header is None: header = sniffer.has_header(sample) with open(path, newline="") as fd: if header: reader = csv.DictReader(fd, dialect=dialect) else: reader = csv.reader(fd, dialect=dialect) rows = list(reader) table = Table(rows, columns) notebook_table(table) return table
def read_table_from_csv( self, path, header=None, columns=None, dialect=None, delimiters=None, column_unknown="Unknown", ): """Read a CSV file as a table. :param path: path to CSV file :param header: CSV file includes header :param columns: names of columns in resulting table :param dialect: format of CSV file :param delimiters: string of possible delimiters :param column_unknown: column name for unknown fields By default attempts to deduce the CSV format and headers from a sample of the input file. If it's unable to determine the format automatically, the dialect and header will have to be defined manually. Valid ``dialect`` values are ``excel``, ``excel-tab``, and ``unix``, and ``header`` is boolean argument (``True``/``False``). Optionally a set of valid ``delimiters`` can be given as a string. The ``columns`` argument can be used to override the names of columns in the resulting table. The amount of columns must match the input data. If the source data has a header and rows have more fields than the header defines, the remaining values are put into the column given by ``column_unknown``. By default it has the value "Unknown". Examples: .. code-block:: robotframework # Source dialect is deduced automatically ${table}= Read table from CSV export.csv Log Found columns: ${table.columns} # Source dialect is known and given explicitly ${table}= Read table from CSV export-excel.csv dialect=excel Log Found columns: ${table.columns} """ sniffer = csv.Sniffer() with open(path, newline="") as fd: sample = fd.read(1024) if dialect is None: dialect = sniffer.sniff(sample, delimiters) if header is None: header = sniffer.has_header(sample) with open(path, newline="") as fd: if header: reader = csv.DictReader(fd, dialect=dialect, restkey=str(column_unknown)) else: reader = csv.reader(fd, dialect=dialect) rows = list(reader) table = Table(rows, columns) notebook_table(self.table_head(table, 10)) if header and column_unknown in table.columns: self.logger.warning( "CSV file (%s) had fields not defined in header, " "which can be the result of a wrong dialect", path, ) return table