Skip to content

Commit 228cc76

Browse files
committed
adding second csv decoding method + sniffing dialect
1 parent b8c80b0 commit 228cc76

1 file changed

Lines changed: 42 additions & 1 deletion

File tree

python-lib/dku_utils.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,50 @@ def decode_csv_data(data):
171171
import io
172172
json_data = None
173173
data = decode_bytes(data)
174+
logger.info("Sniffing potential csv data")
174175
try:
175-
reader = csv.DictReader(io.StringIO(data))
176+
sniffer = csv.Sniffer()
177+
dialect = sniffer.sniff(data)
178+
logger.info(
179+
"Decoding CSV method 1 with delim='{}', dbl='{}', esc='{}', lnt='{}', qtchr='{}', qtng='{}', skip='{}'".format(
180+
dialect.delimiter,
181+
dialect.doublequote,
182+
dialect.escapechar,
183+
dialect.lineterminator,
184+
dialect.quotechar,
185+
dialect.quoting,
186+
dialect.skipinitialspace
187+
)
188+
)
189+
except Exception as error:
190+
logger.error("Could not sniff csv dialect. Error={}".format(error))
191+
dialect = "excel"
192+
try:
193+
reader = csv.DictReader(
194+
io.StringIO(data),
195+
dialect=dialect
196+
)
176197
json_data = list(reader)
198+
except Exception as error:
199+
logger.error("Could not extract csv data. Error={}. Trying method 2.".format(error))
200+
json_data = decode_csv_data_m2(data, dialect)
201+
return json_data
202+
203+
204+
def decode_csv_data_m2(data, dialect):
205+
import csv
206+
json_data = None
207+
try:
208+
json_data = []
209+
headers = []
210+
for row in csv.reader(data.splitlines(), dialect=dialect):
211+
if not headers:
212+
headers = row
213+
else:
214+
output_row = {}
215+
for header, item in zip(headers, row):
216+
output_row[header] = item
217+
json_data.append(output_row)
177218
except Exception as error:
178219
logger.error("Could not extract csv data. Error={}".format(error))
179220
json_data = data

0 commit comments

Comments
 (0)