[FIX] account_statement_base_import: autodetect CSV file delimiter

This commit is contained in:
Alexandre Fayolle @ camptocamp
2012-11-23 17:27:24 +01:00
parent e0b690363c
commit ccd7b763d1
2 changed files with 9 additions and 4 deletions

View File

@@ -106,7 +106,7 @@ class FileParser(BankStatementImportParser):
return True return True
def _parse_csv(self, delimiter=';'): def _parse_csv(self):
""" """
:return: list of dict from csv file (line/rows) :return: list of dict from csv file (line/rows)
""" """
@@ -114,7 +114,7 @@ class FileParser(BankStatementImportParser):
csv_file.write(self.filebuffer) csv_file.write(self.filebuffer)
csv_file.flush() csv_file.flush()
with open(csv_file.name, 'rU') as fobj: with open(csv_file.name, 'rU') as fobj:
reader = UnicodeDictReader(fobj, delimiter=delimiter, fieldnames=self.fieldnames) reader = UnicodeDictReader(fobj, fieldnames=self.fieldnames)
return list(reader) return list(reader)
def _parse_xls(self): def _parse_xls(self):

View File

@@ -22,7 +22,12 @@ import base64
import csv import csv
def UnicodeDictReader(utf8_data, **kwargs): def UnicodeDictReader(utf8_data, **kwargs):
csv_reader = csv.DictReader(utf8_data, **kwargs) sniffer = csv.Sniffer()
pos = utf8_data.tell()
sample_data = utf8_data.read(1024)
utf8_data.seek(pos)
dialect = sniffer.sniff(sample_data, delimiters=',;\t')
csv_reader = csv.DictReader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader: for row in csv_reader:
yield dict([(key, unicode(value, 'utf-8')) for key, value in row.iteritems()]) yield dict([(key, unicode(value, 'utf-8')) for key, value in row.iteritems()])
@@ -210,4 +215,4 @@ def new_bank_statement_parser(parser_name, *args, **kwargs):
if cls.parser_for(parser_name): if cls.parser_for(parser_name):
return cls(parser_name, *args, **kwargs) return cls(parser_name, *args, **kwargs)
raise ValueError raise ValueError