From d78001a6f707a27d5a1643179243a222057d0bda Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 27 Mar 2019 16:17:07 +0100 Subject: CSV import: manage semi-colon as separator --- ishtar_common/models_imports.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'ishtar_common/models_imports.py') diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 380a582cf..a774cef6d 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -807,6 +807,9 @@ ENCODINGS = [(settings.ENCODING, settings.ENCODING), (settings.ALT_ENCODING, settings.ALT_ENCODING), ('utf-8', 'utf-8')] +CSV_SEPS = ((u",", u","), + (u";", u";"),) + delayed_import = None delayed_check = None @@ -848,6 +851,11 @@ class Import(models.Model): ) encoding = models.CharField(_(u"Encoding"), choices=ENCODINGS, default=u'utf-8', max_length=15) + csv_sep = models.CharField( + _(u"CSV separator"), choices=CSV_SEPS, default=u',', max_length=1, + help_text=_(u"Separator for CSV file. Standard is comma but Microsoft " + u"Excel do not follow this standard and use semi-colon.") + ) skip_lines = models.IntegerField( _(u"Skip lines"), default=1, help_text=_(u"Number of header lines in your file (can be 0).")) @@ -919,7 +927,7 @@ class Import(models.Model): filename = self.imported_file.path with open(filename, 'r') as f: reader = unicodecsv.reader( - f, encoding=self.encoding) + f, encoding=self.encoding, delimiter=str(self.csv_sep)) nb = sum(1 for row in reader) - self.skip_lines self.number_of_line = nb self.save() @@ -1040,9 +1048,9 @@ class Import(models.Model): for encoding in encodings: try: with open(imported_file) as csv_file: - vals = [line - for line in unicodecsv.reader(csv_file, - encoding=encoding)] + vals = [line for line in unicodecsv.reader( + csv_file, encoding=encoding, + delimiter=str(self.csv_sep))] if tmpdir: shutil.rmtree(tmpdir) return vals -- cgit v1.2.3