diff options
| author | Kenneth Reitz <me@kennethreitz.org> | 2016-02-07 06:36:12 -0500 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.org> | 2016-02-07 06:36:12 -0500 |
| commit | d90358bf6991ec19a4c6a07173f9127e970d96fb (patch) | |
| tree | 7e76962d170635d1073360cc8bbb65b7d94686ff /tablib | |
| parent | c5920249ded38dc5fe70f22021f4a0dd73dd97cf (diff) | |
| parent | 5fbdd56fba67b259a2bee7979b20fbbd9a31dc63 (diff) | |
| download | tablib-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.py | 50 |
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. |
