diff --git a/pandas/io/common.py b/pandas/io/common.py index c62de76286610..d682604cf7aab 100644 --- a/pandas/io/common.py +++ b/pandas/io/common.py @@ -2,6 +2,7 @@ import bz2 import codecs +from collections.abc import Iterator import gzip from io import BufferedIOBase, BytesIO import mmap @@ -49,18 +50,6 @@ _VALID_URLS.discard("") -class BaseIterator: - """Subclass this and provide a "__next__()" method to obtain an iterator. - Useful only when the object being iterated is non-reusable (e.g. OK for a - parser, not for an in-memory table, yes for its iterator).""" - - def __iter__(self) -> "BaseIterator": - return self - - def __next__(self): - raise AbstractMethodError(self) - - def is_url(url) -> bool: """ Check to see if a URL has a valid protocol. @@ -515,7 +504,7 @@ def closed(self): return self.fp is None -class _MMapWrapper(BaseIterator): +class _MMapWrapper(Iterator): """ Wrapper for the Python's mmap class so that it can be properly read in by Python's csv.reader class. @@ -552,7 +541,7 @@ def __next__(self) -> str: return newline -class UTF8Recoder(BaseIterator): +class UTF8Recoder(Iterator): """ Iterator that reads an encoded stream and re-encodes the input to UTF-8 """ @@ -566,7 +555,7 @@ def read(self, bytes: int = -1) -> bytes: def readline(self) -> bytes: return self.reader.readline().encode("utf-8") - def next(self) -> bytes: + def __next__(self) -> bytes: return next(self.reader).encode("utf-8") def close(self): diff --git a/pandas/io/json/_json.py b/pandas/io/json/_json.py index 14a272e15bc29..7444ebbaf27e3 100644 --- a/pandas/io/json/_json.py +++ b/pandas/io/json/_json.py @@ -1,4 +1,5 @@ from collections import OrderedDict +from collections.abc import Iterator import functools from io import StringIO from itertools import islice @@ -19,7 +20,6 @@ from pandas.core.reshape.concat import concat from pandas.io.common import ( - BaseIterator, get_filepath_or_buffer, get_handle, infer_compression, @@ -616,7 +616,7 @@ def read_json( return result -class JsonReader(BaseIterator): +class JsonReader(Iterator): """ JsonReader provides an interface for reading in a JSON file. diff --git a/pandas/io/parsers.py b/pandas/io/parsers.py index 37cd36a2be3bc..6699575e61656 100755 --- a/pandas/io/parsers.py +++ b/pandas/io/parsers.py @@ -3,6 +3,7 @@ """ from collections import defaultdict +from collections.abc import Iterator import csv import datetime from io import StringIO @@ -62,7 +63,6 @@ from pandas.core.tools import datetimes as tools from pandas.io.common import ( - BaseIterator, UTF8Recoder, get_filepath_or_buffer, get_handle, @@ -786,7 +786,7 @@ def read_fwf( return _read(filepath_or_buffer, kwds) -class TextFileReader(BaseIterator): +class TextFileReader(Iterator): """ Passed dialect overrides any of the related parser options @@ -3582,7 +3582,7 @@ def _get_col_names(colspec, columns): return colnames -class FixedWidthReader(BaseIterator): +class FixedWidthReader(Iterator): """ A reader of fixed-width lines. """ diff --git a/pandas/io/sas/sas7bdat.py b/pandas/io/sas/sas7bdat.py index eb57d703cd4d5..fe96b94e368e3 100644 --- a/pandas/io/sas/sas7bdat.py +++ b/pandas/io/sas/sas7bdat.py @@ -13,6 +13,7 @@ Reference for binary data compression: http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/CUJ/1992/9210/ross/ross.htm """ +from collections.abc import Iterator from datetime import datetime import struct @@ -22,7 +23,7 @@ import pandas as pd -from pandas.io.common import BaseIterator, get_filepath_or_buffer +from pandas.io.common import get_filepath_or_buffer from pandas.io.sas._sas import Parser import pandas.io.sas.sas_constants as const @@ -36,7 +37,7 @@ class _column: # SAS7BDAT represents a SAS data file in SAS7BDAT format. -class SAS7BDATReader(BaseIterator): +class SAS7BDATReader(Iterator): """ Read SAS files in SAS7BDAT format. diff --git a/pandas/io/sas/sas_xport.py b/pandas/io/sas/sas_xport.py index 9aa8ed1dfeb5d..ccaee56383a5f 100644 --- a/pandas/io/sas/sas_xport.py +++ b/pandas/io/sas/sas_xport.py @@ -7,7 +7,7 @@ https://support.sas.com/techsup/technote/ts140.pdf """ - +from collections.abc import Iterator from datetime import datetime from io import BytesIO import struct @@ -19,7 +19,7 @@ import pandas as pd -from pandas.io.common import BaseIterator, get_filepath_or_buffer +from pandas.io.common import get_filepath_or_buffer _correct_line1 = ( "HEADER RECORD*******LIBRARY HEADER RECORD!!!!!!!" @@ -251,7 +251,7 @@ def _parse_float_vec(vec): return ieee -class XportReader(BaseIterator): +class XportReader(Iterator): __doc__ = _xport_reader_doc def __init__( diff --git a/pandas/io/stata.py b/pandas/io/stata.py index 84dd302fc293f..fc54a1fa2370d 100644 --- a/pandas/io/stata.py +++ b/pandas/io/stata.py @@ -9,7 +9,7 @@ You can find more information on http://presbrey.mit.edu/PyDTA and http://www.statsmodels.org/devel/ """ - +from collections.abc import Iterator import datetime from io import BytesIO import os @@ -44,7 +44,7 @@ from pandas.core.frame import DataFrame from pandas.core.series import Series -from pandas.io.common import BaseIterator, get_filepath_or_buffer, stringify_path +from pandas.io.common import get_filepath_or_buffer, stringify_path _version_error = ( "Version of given Stata file is not 104, 105, 108, " @@ -1010,7 +1010,7 @@ def __init__(self): ) -class StataReader(StataParser, BaseIterator): +class StataReader(StataParser, Iterator): __doc__ = _stata_reader_doc def __init__(