Revision 1444
Added by Aaron Marcuse-Kubitza almost 13 years ago
lib/csvs.py | ||
---|---|---|
3 | 3 |
import csv |
4 | 4 |
import StringIO |
5 | 5 |
|
6 |
import util |
|
7 |
|
|
6 | 8 |
delimiters = ',\t`' |
7 | 9 |
|
10 |
def stream_info(stream): |
|
11 |
'''Automatically detects the dialect based on the header line |
|
12 |
@return NamedTuple {header_line, dialect}''' |
|
13 |
info = util.NamedTuple() |
|
14 |
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 |
|
18 |
return info |
|
19 |
|
|
8 | 20 |
def reader_and_header(stream): |
9 | 21 |
'''Automatically detects the dialect based on the header line |
10 | 22 |
@return tuple (reader, header)''' |
11 |
header_line = stream.readline() |
|
12 |
sniffer = csv.Sniffer() |
|
13 |
dialect = sniffer.sniff(header_line, delimiters) |
|
14 |
dialect.doublequote = True # Sniffer doesn't turn this on by default |
|
15 |
header = csv.reader(StringIO.StringIO(header_line), dialect).next() |
|
16 |
return (csv.reader(stream, dialect), header) |
|
23 |
info = stream_info(stream) |
|
24 |
header = csv.reader(StringIO.StringIO(info.header_line), |
|
25 |
info.dialect).next() |
|
26 |
return (csv.reader(stream, info.dialect), header) |
Also available in: Unified diff
csvs.py: Added stream_info() to return NamedTuple {header_line, dialect} for later use in cat_csv. Changed reader_and_header() to use stream_info().