[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
def _parse_csv(self, delimiter=';'):
def _parse_csv(self):
"""
:return: list of dict from csv file (line/rows)
"""
@@ -114,7 +114,7 @@ class FileParser(BankStatementImportParser):
csv_file.write(self.filebuffer)
csv_file.flush()
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)
def _parse_xls(self):

View File

@@ -22,7 +22,12 @@ import base64
import csv
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:
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):
return cls(parser_name, *args, **kwargs)
raise ValueError