summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.org>2016-02-07 06:36:12 -0500
committerKenneth Reitz <me@kennethreitz.org>2016-02-07 06:36:12 -0500
commitd90358bf6991ec19a4c6a07173f9127e970d96fb (patch)
tree7e76962d170635d1073360cc8bbb65b7d94686ff /tablib
parentc5920249ded38dc5fe70f22021f4a0dd73dd97cf (diff)
parent5fbdd56fba67b259a2bee7979b20fbbd9a31dc63 (diff)
downloadtablib-d90358bf6991ec19a4c6a07173f9127e970d96fb.tar.gz
Merge branch 'develop' of https://github.com/rabinnankhwa/tablib into develop
# Conflicts: # AUTHORS
Diffstat (limited to 'tablib')
-rw-r--r--tablib/core.py50
1 files changed, 42 insertions, 8 deletions
diff --git a/tablib/core.py b/tablib/core.py
index a744a70..8c4cc51 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -163,15 +163,9 @@ class Dataset(object):
# (column, callback) tuples
self._formatters = []
- try:
- self.headers = kwargs['headers']
- except KeyError:
- self.headers = None
+ self.headers = kwargs.get('headers')
- try:
- self.title = kwargs['title']
- except KeyError:
- self.title = None
+ self.title = kwargs.get('title')
self._register_formats()
@@ -952,6 +946,46 @@ class Dataset(object):
self.__headers = None
+ def subset(self, rows=None, cols=None):
+ """Returns a new instance of the :class:`Dataset`,
+ including only specified rows and columns.
+ """
+
+ # Don't return if no data
+ if not self:
+ return
+
+ if rows is None:
+ rows = list(range(self.height))
+
+ if cols is None:
+ cols = list(self.headers)
+
+ #filter out impossible rows and columns
+ rows = [row for row in rows if row in range(self.height)]
+ cols = [header for header in cols if header in self.headers]
+
+ _dset = Dataset()
+
+ #filtering rows and columns
+ _dset.headers = list(cols)
+
+ _dset._data = []
+ for row_no, row in enumerate(self._data):
+ data_row = []
+ for key in _dset.headers:
+ if key in self.headers:
+ pos = self.headers.index(key)
+ data_row.append(row[pos])
+ else:
+ raise KeyError
+
+ if row_no in rows:
+ _dset.append(row=Row(data_row))
+
+ return _dset
+
+
class Databook(object):
"""A book of :class:`Dataset` objects.