Revision 1621
Added by Aaron Marcuse-Kubitza almost 13 years ago
lib/csvs.py | ||
---|---|---|
7 | 7 |
|
8 | 8 |
delimiters = ',\t`' |
9 | 9 |
|
10 |
def sniff(line): |
|
11 |
'''Automatically detects the dialect''' |
|
12 |
dialect = csv.Sniffer().sniff(line, delimiters) |
|
13 |
# TSVs usually don't quote fields (nor doublequote embedded quotes) |
|
14 |
if dialect.delimiter == '\t': dialect.quoting = csv.QUOTE_NONE |
|
15 |
else: dialect.doublequote = True # Sniffer doesn't turn this on by default |
|
16 |
return dialect |
|
17 |
|
|
10 | 18 |
def stream_info(stream): |
11 | 19 |
'''Automatically detects the dialect based on the header line |
12 | 20 |
@return NamedTuple {header_line, dialect}''' |
13 | 21 |
info = util.NamedTuple() |
14 | 22 |
info.header_line = stream.readline() |
15 |
sniffer = csv.Sniffer() |
|
16 |
info.dialect = sniffer.sniff(info.header_line, delimiters) |
|
17 |
info.dialect.doublequote = True # Sniffer doesn't turn this on by default |
|
23 |
info.dialect = sniff(info.header_line) |
|
18 | 24 |
return info |
19 | 25 |
|
20 | 26 |
def reader_and_header(stream): |
Also available in: Unified diff
csvs.py: stream_info(): Set dialect.quoting = csv.QUOTE_NONE for TSVs because they usually don't quote fields. Factored dialect detecting code into new function sniff().