def io_test(): # prepare data --- file_path = "sample_data.csv" csv_text = "\n".join([ '"attr_a","attr_b","attr_c"', '1,4,"a"', '2,2.1,"bb"', '3,120.9,"ccc"', ]) with open(file_path, "w") as f: f.write(csv_text) # load from a csv text --- loader = ptr.CsvTableTextLoader(csv_text) for table_data in loader.load(): print("\n".join([ "load from text", "==============", "{:s}".format(ptw.dumps_tabledata(table_data)), ])) # load from a csv file --- loader = ptr.CsvTableFileLoader(file_path) for table_data in loader.load(): print("\n".join([ "load from file", "==============", "{:s}".format(ptw.dumps_tabledata(modify(table_data))), ]))
def test_null(self, tmpdir, filename, headers, expected): loader = ptr.CsvTableFileLoader(filename) loader.headers = headers with pytest.raises(expected): for _tabletuple in loader.load(): pass
def create_table_from_csv(self, csv_source, table_name="", attr_name_list=(), delimiter=",", quotechar='"', encoding="utf-8"): """ Create a table from a CSV file/text. :param str csv_source: Path to the CSV file or CSV text. :param str table_name: Table name to create. Using CSV file basename as the table name if the value is empty. :param list attr_name_list: Attribute names of the table. Use the first line of the CSV file as attribute list if attribute_name_list is empty. :param str delimiter: A one-character string used to separate fields. :param str quotechar: A one-character string used to quote fields containing special characters, such as the ``delimiter`` or ``quotechar``, or which contain new-line characters. :param str encoding: CSV file encoding. :raises ValueError: If the CSV data is invalid. :Example: :ref:`example-create-table-from-csv` .. seealso:: :py:meth:`.create_table_from_data_matrix` :py:func:`csv.reader` :py:meth:`.pytablereader.CsvTableFileLoader.load` :py:meth:`.pytablereader.CsvTableTextLoader.load` """ loader = ptr.CsvTableFileLoader(csv_source) if typepy.is_not_null_string(table_name): loader.table_name = table_name loader.header_list = attr_name_list loader.delimiter = delimiter loader.quotechar = quotechar loader.encoding = encoding try: for tabledata in loader.load(): self.create_table_from_tabledata(tabledata) return except (ptr.InvalidFilePathError, IOError): pass loader = ptr.CsvTableTextLoader(csv_source) if typepy.is_not_null_string(table_name): loader.table_name = table_name loader.header_list = attr_name_list loader.delimiter = delimiter loader.quotechar = quotechar loader.encoding = encoding for tabledata in loader.load(): self.create_table_from_tabledata(tabledata)
def test_exception(self, tmpdir, table_text, filename, header_list, expected): p_csv = tmpdir.join(filename) with io.open(str(p_csv), "w", encoding="utf8") as f: f.write(table_text) loader = ptr.CsvTableFileLoader(str(p_csv)) loader.header_list = header_list with pytest.raises(expected): for _tabletuple in loader.load(): pass
def test_normal_fifo(self, tmpdir, table_text, fifo_name, expected): namedpipe = str(tmpdir.join(fifo_name)) os.mkfifo(namedpipe) loader = ptr.CsvTableFileLoader(namedpipe) with ProcessPoolExecutor() as executor: executor.submit(fifo_writer, namedpipe, table_text) for tabledata in loader.load(): print(dumps_tabledata(tabledata)) assert tabledata.in_tabledata_list(expected)
def test_normal(self, tmpdir, test_id, table_text, filename, header_list, expected): file_path = Path(str(tmpdir.join(filename))) file_path.parent.makedirs_p() with io.open(file_path, "w", encoding="utf-8") as f: f.write(table_text) loader = ptr.CsvTableFileLoader(file_path) loader.header_list = header_list for tabledata in loader.load(): print("test-id={}".format(test_id)) print(ptw.dump_tabledata(tabledata)) assert tabledata.in_tabledata_list(expected)
def test_normal_multibyte(self, tmpdir, test_id, table_text, filename, encoding, headers, expected): file_path = Path(str(tmpdir.join(filename))) file_path.parent.makedirs_p() with open(file_path, "w", encoding=encoding) as f: f.write(table_text) loader = ptr.CsvTableFileLoader(file_path) loader.headers = headers for tabledata in loader.load(): print("test-id={}".format(test_id)) print(dumps_tabledata(tabledata)) assert tabledata.in_tabledata_list(expected)
def from_csv(self, csv_source, delimiter=","): """ Set tabular attributes to the writer from a character-separated values (CSV) data source. Following attributes are set to the writer by the method: - :py:attr:`~.header_list`. - :py:attr:`~.value_matrix`. :py:attr:`~.table_name` also be set if the CSV data source is a file. In that case, :py:attr:`~.table_name` is as same as the filename. :param str csv_source: Input CSV data source either can be designated CSV text or CSV file path. :Examples: :ref:`example-from-csv` :Dependency Packages: - `pytablereader <https://github.com/thombashi/pytablereader>`__ """ import pytablereader as ptr loader = ptr.CsvTableTextLoader(csv_source, quoting_flags=self._quoting_flags) loader.delimiter = delimiter try: for table_data in loader.load(): self.from_tabledata(table_data, is_overwrite_table_name=False) return except ptr.DataError: pass loader = ptr.CsvTableFileLoader(csv_source, quoting_flags=self._quoting_flags) loader.delimiter = delimiter for table_data in loader.load(): self.from_tabledata(table_data)
def test_exception(self, value, source, expected): loader = ptr.CsvTableFileLoader(source) loader.table_name = value with pytest.raises(expected): loader.make_table_name()
def test_normal(self, value, source, expected): loader = ptr.CsvTableFileLoader(source) loader.table_name = value assert loader.make_table_name() == expected
import pytablewriter as ptw # prepare data --- file_path = "sample_data.csv" csv_text = "\n".join([ '"attr_a","attr_b","attr_c"', '1,4,"a"', '2,2.1,"bb"', '3,120.9,"ccc"', ]) with open(file_path, "w") as f: f.write(csv_text) # load from a csv file --- loader = ptr.CsvTableFileLoader(file_path) for table_data in loader.load(): print("\n".join([ "load from file", "==============", "{:s}".format(ptw.dumps_tabledata(table_data)), ])) # load from a csv text --- loader = ptr.CsvTableTextLoader(csv_text) for table_data in loader.load(): print("\n".join([ "load from text", "==============", "{:s}".format(ptw.dumps_tabledata(table_data)), ]))