def discover_dialect(sample, dialect=None, **kwargs): """ Discover CSV dialect from string sample Returns dict """ if isinstance(dialect, compatibility._strtypes): dialect = csv.get_dialect(dialect) sniffer = csv.Sniffer() if not dialect: try: dialect = sniffer.sniff(sample) except: dialect = csv.get_dialect('excel') # Convert dialect to dictionary dialect = dict((key, getattr(dialect, key)) for key in dir(dialect) if not key.startswith('_')) # Update dialect with any keyword arguments passed in # E.g. allow user to override with delimiter=',' for k, v in kwargs.items(): if k in dialect: dialect[k] = v return dialect
def test_register_kwargs(self): name = 'fedcba' csv.register_dialect(name, delimiter=';') try: self.assertTrue(csv.get_dialect(name).delimiter, '\t') self.assertTrue(list(csv.reader('X;Y;Z', name)), ['X', 'Y', 'Z']) finally: csv.unregister_dialect(name)
def test_register_kwargs(self): name = 'fedcba' csv.register_dialect(name, delimiter=';') try: self.assertNotEqual(csv.get_dialect(name).delimiter, '\t') self.assertEqual(list(csv.reader([b'X;Y;Z'], name)), [[u'X', u'Y', u'Z']]) finally: csv.unregister_dialect(name)
def test_registry(self): class myexceltsv(csv.excel): delimiter = "\t" name = "myexceltsv" expected_dialects = csv.list_dialects() + [name] expected_dialects.sort() csv.register_dialect(name, myexceltsv) try: self.assertTrue(csv.get_dialect(name).delimiter, '\t') got_dialects = csv.list_dialects() got_dialects.sort() self.assertEqual(expected_dialects, got_dialects) finally: csv.unregister_dialect(name)
def test_registry(self): class myexceltsv(csv.excel): delimiter = "\t" name = "myexceltsv" expected_dialects = csv.list_dialects() + [name] expected_dialects.sort() csv.register_dialect(name, myexceltsv) try: self.assertEqual(csv.get_dialect(name).delimiter, '\t') got_dialects = csv.list_dialects() got_dialects.sort() self.assertEqual(expected_dialects, got_dialects) finally: csv.unregister_dialect(name)