From e75a00541d83c1df6ede20fec3a5611f960b6821 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Tue, 19 Oct 2010 10:45:54 +0200 Subject: Support for TSV-files. Unit-tested. --- tablib/formats/_tsv.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tablib/formats/_tsv.py (limited to 'tablib/formats/_tsv.py') 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 -- cgit v1.2.1