diff --git a/randomAccessReader/__init__.py b/randomAccessReader/__init__.py index ee71573..48869b8 100644 --- a/randomAccessReader/__init__.py +++ b/randomAccessReader/__init__.py @@ -10,7 +10,7 @@ # ============= import csv -import StringIO +from io import StringIO # ========== # classes @@ -68,7 +68,7 @@ def get_lines(self, line_number, amount=1): """ lines = [] with open(self._filepath) as f: - for x in xrange(amount): + for x in range(amount): line_data = self._lines[line_number] f.seek(line_data['position']) lines.append(f.read(line_data['length'])) @@ -84,7 +84,8 @@ def __init__(self, filepath, has_header=True, **kwargs): :param has_header: :param kwargs: endline_character='\n', values_delimiter=',', quotechar='"', ignore_corrupt=False, ignore_blank_lines=True """ - super(CsvRandomAccessReader, self).__init__(filepath, kwargs.get('endline_character','\n'), kwargs.get('ignore_blank_lines', True)) + super(CsvRandomAccessReader, self).__init__(filepath, kwargs.get('endline_character', '\n'), + kwargs.get('ignore_blank_lines', True)) self._headers = None self._delimiter = kwargs.get('values_delimiter', ',') self._quotechar = kwargs.get('quotechar', '"') @@ -92,9 +93,9 @@ def __init__(self, filepath, has_header=True, **kwargs): self.has_header = has_header if has_header: dialect = self.MyDialect(self._endline, self._quotechar, self._delimiter) - b = StringIO.StringIO(self.get_lines(0)[0]) + b = StringIO(self.get_lines(0)[0]) r = csv.reader(b, dialect) - values = tuple(r.next()) + values = tuple(next(r)) self._headers = values @property @@ -113,9 +114,9 @@ def _get_line_values(self, line): :return: tuple of str """ dialect = self.MyDialect(self._endline, self._quotechar, self._delimiter) - b = StringIO.StringIO(line) + b = StringIO(line) r = csv.reader(b, dialect) - values = tuple(r.next()) + values = tuple(next(r)) if len(self._headers) != len(values): if not self._ignore_bad_lines: raise ValueError("Corrupt csv - header and row have different lengths") @@ -135,10 +136,10 @@ def get_line_dicts(self, line_number, amount=1): line_number += 1 lines = [] text_lines = self.get_lines(line_number, amount) - for x in xrange(amount): + for x in range(amount): vals = self._get_line_values(text_lines[x]) if vals is None: - lines.append(dict(zip(self._headers, range(len(self._headers))))) + lines.append(dict(zip(self._headers, list(range(len(self._headers)))))) else: lines.append(dict(zip(self._headers, vals))) return lines diff --git a/randomAccessReader/__pycache__/__init__.cpython-35.pyc b/randomAccessReader/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000..2b9161f Binary files /dev/null and b/randomAccessReader/__pycache__/__init__.cpython-35.pyc differ diff --git a/tests/tests.py b/tests/tests.py index 0e50a01..17bf0c5 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -44,4 +44,8 @@ def test_ignore_corrupt(self): path = os.path.dirname(os.path.abspath(__file__)) + "/corrupt.csv" reader = CsvRandomAccessReader(path, ignore_corrupt=True) corrupt_lines = reader.get_line_dicts(0,8) - self.assertEqual(len(corrupt_lines), 8) \ No newline at end of file + self.assertEqual(len(corrupt_lines), 8) + + +if __name__ == '__main__': + unittest.main()