-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcsv_dialect_sniffer.py
More file actions
37 lines (31 loc) · 1.12 KB
/
csv_dialect_sniffer.py
File metadata and controls
37 lines (31 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import csv
import logging
import sys
from io import StringIO
logging.basicConfig(stream=sys.stderr, level=logging.INFO)
csv.register_dialect(
"escaped", escapechar="\\", doublequote=False, quoting=csv.QUOTE_NONE
)
csv.register_dialect("singlequote", quotechar="'", quoting=csv.QUOTE_ALL)
if __name__ == "__main__":
samples = []
for name in sorted(csv.list_dialects()):
buffer = StringIO()
dialect = csv.get_dialect(name)
writer = csv.writer(buffer, dialect=dialect)
writer.writerow(
(
"col1",
1,
"10/01/2010",
"Special chars \" ' {} to parse".format(dialect.delimiter),
)
)
samples.append((name, dialect, buffer.getvalue()))
sniffer = csv.Sniffer()
for name, expected, sample in samples:
logging.info('Dialect: "%s"', name)
logging.info("In: %s", sample.rstrip())
dialect = sniffer.sniff(sample, delimiters=",\t")
reader = csv.reader(StringIO(sample), dialect=dialect)
logging.info("Parsed:\n %s\n", "\n ".join(repr(r) for r in next(reader)))