diff --git a/account_statement_base_import/parser/file_parser.py b/account_statement_base_import/parser/file_parser.py index 1e8f0e17..5b27c738 100644 --- a/account_statement_base_import/parser/file_parser.py +++ b/account_statement_base_import/parser/file_parser.py @@ -19,8 +19,6 @@ ############################################################################## from openerp.tools.translate import _ -import base64 -import csv import tempfile import datetime from parser import BankStatementImportParser @@ -111,20 +109,16 @@ class FileParser(BankStatementImportParser): return True - def _parse_csv(self, delimiter=';'): + def _parse_csv(self): """ - :return: dict of dict from csv file (line/rows) + :return: list of dict from csv file (line/rows) """ csv_file = tempfile.NamedTemporaryFile() csv_file.write(self.filebuffer) - # We ensure that cursor is at beginig of file - csv_file.seek(0) - reader = UnicodeDictReader( - open(csv_file.name).readlines(), - delimiter=delimiter, - fieldnames=self.fieldnames - ) - return [x for x in reader] + csv_file.flush() + with open(csv_file.name, 'rU') as fobj: + reader = UnicodeDictReader(fobj, fieldnames=self.fieldnames) + return list(reader) def _parse_xls(self): """ diff --git a/account_statement_base_import/parser/parser.py b/account_statement_base_import/parser/parser.py index c39098fa..a2dff32d 100644 --- a/account_statement_base_import/parser/parser.py +++ b/account_statement_base_import/parser/parser.py @@ -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 - \ No newline at end of file +