diff options
| author | Luca Beltrame <einar@heavensinferno.net> | 2010-10-19 10:45:54 +0200 |
|---|---|---|
| committer | Luca Beltrame <einar@heavensinferno.net> | 2010-10-19 10:45:54 +0200 |
| commit | e75a00541d83c1df6ede20fec3a5611f960b6821 (patch) | |
| tree | 9c98f06fe78befc84cc0b73a58239cd28daeb8c0 /tablib/formats/_tsv.py | |
| parent | 3b0e0c7991da92e8a65c637afd19ac52e93deddd (diff) | |
| download | tablib-e75a00541d83c1df6ede20fec3a5611f960b6821.tar.gz | |
Support for TSV-files. Unit-tested.
Diffstat (limited to 'tablib/formats/_tsv.py')
| -rw-r--r-- | tablib/formats/_tsv.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tablib/formats/_tsv.py b/tablib/formats/_tsv.py new file mode 100644 index 0000000..8603c45 --- /dev/null +++ b/tablib/formats/_tsv.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +""" Tablib - TSV (Tab Separated Values) Support. +""" + +import cStringIO +import csv +import os + +import tablib + + +title = 'tsv' +extentions = ('tsv',) + + + +def export_set(dataset): + """Returns a TSV representation of Dataset.""" + stream = cStringIO.StringIO() + _tsv = csv.writer(stream, delimiter="\t") + + for row in dataset._package(dicts=False): + _tsv.writerow(row) + + return stream.getvalue() + + +def import_set(dset, in_stream, headers=True): + """Returns dataset from TSV stream.""" + + dset.wipe() + + rows = csv.reader(in_stream.split("\r\n"), delimiter="\t") + for i, row in enumerate(rows): + + # Skip empty rows + if not row: + continue + + if (i == 0) and (headers): + dset.headers = row + else: + dset.append(row) + + +def detect(stream): + """Returns True if given stream is valid TSV.""" + try: + rows = dialect = csv.Sniffer().sniff(stream, delimiters="\t") + return True + except csv.Error: + return False |
