diff --git a/pandas/_libs/tslibs/parsing.pyx b/pandas/_libs/tslibs/parsing.pyx index 6e191d572529f..1741ff24b1ac8 100644 --- a/pandas/_libs/tslibs/parsing.pyx +++ b/pandas/_libs/tslibs/parsing.pyx @@ -2,9 +2,9 @@ """ Parsing functions for datetime and datetime-like strings. """ -import sys import re import time +from io import StringIO from cpython.datetime cimport datetime @@ -13,13 +13,6 @@ import numpy as np import six -# Avoid import from outside _libs -if sys.version_info.major == 2: - from StringIO import StringIO -else: - from io import StringIO - - # dateutil compat from dateutil.tz import (tzoffset, tzlocal as _dateutil_tzlocal, diff --git a/pandas/compat/__init__.py b/pandas/compat/__init__.py index a2149f8fe6769..115ea96406e51 100644 --- a/pandas/compat/__init__.py +++ b/pandas/compat/__init__.py @@ -39,16 +39,9 @@ try: import __builtin__ as builtins - # not writeable when instantiated with string, doesn't handle unicode well - from cStringIO import StringIO as cStringIO - # always writeable - from StringIO import StringIO - BytesIO = StringIO import httplib except ImportError: import builtins - from io import StringIO, BytesIO - cStringIO = StringIO import http.client as httplib from pandas.compat.chainmap import DeepChainMap diff --git a/pandas/core/computation/expr.py b/pandas/core/computation/expr.py index 779cc0df1a6fe..81bc2530e5462 100644 --- a/pandas/core/computation/expr.py +++ b/pandas/core/computation/expr.py @@ -3,13 +3,14 @@ import ast from functools import partial, reduce +from io import StringIO import itertools as it import operator import tokenize import numpy as np -from pandas.compat import StringIO, lmap +from pandas.compat import lmap import pandas as pd from pandas import compat diff --git a/pandas/core/computation/scope.py b/pandas/core/computation/scope.py index dd5d66a4e0b42..62d78b3e207e0 100644 --- a/pandas/core/computation/scope.py +++ b/pandas/core/computation/scope.py @@ -4,6 +4,7 @@ import datetime import inspect +from io import StringIO import itertools import pprint import struct @@ -12,7 +13,7 @@ import numpy as np from pandas._libs.tslibs import Timestamp -from pandas.compat import DeepChainMap, StringIO +from pandas.compat import DeepChainMap from pandas.core.base import StringMixin import pandas.core.computation as compu diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 88637e4fb456d..13c8e97bff23f 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -13,6 +13,7 @@ import collections from collections import OrderedDict, abc import functools +from io import StringIO import itertools import sys import warnings @@ -33,7 +34,7 @@ validate_axis_style_args) from pandas import compat -from pandas.compat import PY36, StringIO, lmap, lzip, raise_with_traceback +from pandas.compat import PY36, lmap, lzip, raise_with_traceback from pandas.compat.numpy import function as nv from pandas.core.dtypes.cast import ( maybe_upcast, diff --git a/pandas/core/series.py b/pandas/core/series.py index a176e4c0b8ae9..8a22765d85aec 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -2,6 +2,7 @@ Data structure for 1-dimensional cross-sectional and time series data """ from collections import OrderedDict, abc +from io import StringIO from shutil import get_terminal_size from textwrap import dedent import warnings @@ -12,7 +13,7 @@ from pandas._libs import iNaT, index as libindex, lib, tslibs import pandas.compat as compat -from pandas.compat import PY36, StringIO +from pandas.compat import PY36 from pandas.compat.numpy import function as nv from pandas.util._decorators import Appender, Substitution, deprecate from pandas.util._validators import validate_bool_kwarg diff --git a/pandas/io/clipboards.py b/pandas/io/clipboards.py index 372d74359fe89..d5c9a1f3ec2cf 100644 --- a/pandas/io/clipboards.py +++ b/pandas/io/clipboards.py @@ -1,8 +1,8 @@ """ io on the clipboard """ +from io import StringIO import warnings import pandas.compat as compat -from pandas.compat import StringIO from pandas.core.dtypes.generic import ABCDataFrame diff --git a/pandas/io/common.py b/pandas/io/common.py index 503d155e42e08..bcbfa7930311e 100644 --- a/pandas/io/common.py +++ b/pandas/io/common.py @@ -5,6 +5,7 @@ import csv import gzip from http.client import HTTPException # noqa +from io import BytesIO import lzma import mmap import os @@ -16,7 +17,6 @@ import zipfile import pandas.compat as compat -from pandas.compat import BytesIO from pandas.errors import ( # noqa AbstractMethodError, DtypeWarning, EmptyDataError, ParserError, ParserWarning) @@ -411,7 +411,7 @@ def _get_handle(path_or_buf, mode, encoding=None, compression=None, return f, handles -class BytesZipFile(zipfile.ZipFile, BytesIO): +class BytesZipFile(zipfile.ZipFile, BytesIO): # type: ignore """ Wrapper for standard library class ZipFile and allow the returned file-like handle to accept byte strings via `write` method. diff --git a/pandas/io/formats/csvs.py b/pandas/io/formats/csvs.py index 9f72bf80de744..37f1372366545 100644 --- a/pandas/io/formats/csvs.py +++ b/pandas/io/formats/csvs.py @@ -4,6 +4,7 @@ """ import csv as csvlib +from io import StringIO import os import warnings from zipfile import ZipFile @@ -11,7 +12,6 @@ import numpy as np from pandas._libs import writers as libwriters -from pandas.compat import StringIO from pandas.core.dtypes.generic import ( ABCDatetimeIndex, ABCIndexClass, ABCMultiIndex, ABCPeriodIndex) diff --git a/pandas/io/formats/format.py b/pandas/io/formats/format.py index b658c8a53dc8b..b397a370cecbf 100644 --- a/pandas/io/formats/format.py +++ b/pandas/io/formats/format.py @@ -5,6 +5,7 @@ """ from functools import partial +from io import StringIO from shutil import get_terminal_size from unicodedata import east_asian_width @@ -15,7 +16,7 @@ from pandas._libs import lib from pandas._libs.tslib import format_array_from_datetime from pandas._libs.tslibs import NaT, Timedelta, Timestamp, iNaT -from pandas.compat import StringIO, lzip +from pandas.compat import lzip from pandas.core.dtypes.common import ( is_categorical_dtype, is_datetime64_dtype, is_datetime64tz_dtype, diff --git a/pandas/io/json/json.py b/pandas/io/json/json.py index 7bb0a00e5ffe3..28cc768ba4e21 100644 --- a/pandas/io/json/json.py +++ b/pandas/io/json/json.py @@ -1,4 +1,5 @@ # pylint: disable-msg=E1101,W0613,W0603 +from io import StringIO from itertools import islice import os @@ -6,7 +7,7 @@ import pandas._libs.json as json from pandas._libs.tslibs import iNaT -from pandas.compat import StringIO, to_str +from pandas.compat import to_str from pandas.errors import AbstractMethodError from pandas.core.dtypes.common import is_period_dtype diff --git a/pandas/io/packers.py b/pandas/io/packers.py index 562b7540c2f8a..cff0f0e4b34d0 100644 --- a/pandas/io/packers.py +++ b/pandas/io/packers.py @@ -39,6 +39,7 @@ """ from datetime import date, datetime, timedelta +from io import BytesIO import os from textwrap import dedent import warnings @@ -46,7 +47,6 @@ from dateutil.parser import parse import numpy as np -import pandas.compat as compat from pandas.errors import PerformanceWarning from pandas.util._move import ( BadMove as _BadMove, move_into_mutable_buffer as _move_into_mutable_buffer) @@ -150,7 +150,7 @@ def writer(fh): with open(path_or_buf, mode) as fh: writer(fh) elif path_or_buf is None: - buf = compat.BytesIO() + buf = BytesIO() writer(buf) return buf.getvalue() else: @@ -207,7 +207,7 @@ def read(fh): # treat as a binary-like fh = None try: - fh = compat.BytesIO(path_or_buf) + fh = BytesIO(path_or_buf) return read(fh) finally: if fh is not None: @@ -802,12 +802,12 @@ def __iter__(self): if path_exists: fh = open(self.path, 'rb') else: - fh = compat.BytesIO(self.path) + fh = BytesIO(self.path) else: if not hasattr(self.path, 'read'): - fh = compat.BytesIO(self.path) + fh = BytesIO(self.path) else: diff --git a/pandas/io/parsers.py b/pandas/io/parsers.py index f402116d8c4a3..5d73b377838b6 100755 --- a/pandas/io/parsers.py +++ b/pandas/io/parsers.py @@ -5,6 +5,7 @@ from collections import defaultdict import csv import datetime +from io import StringIO import re import sys from textwrap import fill @@ -17,7 +18,7 @@ import pandas._libs.parsers as parsers from pandas._libs.tslibs import parsing import pandas.compat as compat -from pandas.compat import StringIO, lrange, lzip +from pandas.compat import lrange, lzip from pandas.errors import ( AbstractMethodError, EmptyDataError, ParserError, ParserWarning) from pandas.util._decorators import Appender diff --git a/pandas/io/pickle.py b/pandas/io/pickle.py index 01c7d747a062a..ce2ed247c158b 100644 --- a/pandas/io/pickle.py +++ b/pandas/io/pickle.py @@ -1,10 +1,11 @@ """ pickle compat """ +from io import BytesIO import pickle import warnings from numpy.lib.format import read_array -from pandas.compat import BytesIO, pickle_compat as pc +from pandas.compat import pickle_compat as pc from pandas.io.common import _get_handle, _stringify_path diff --git a/pandas/io/sas/sas_xport.py b/pandas/io/sas/sas_xport.py index 2ddd391de6235..0dbea452230d6 100644 --- a/pandas/io/sas/sas_xport.py +++ b/pandas/io/sas/sas_xport.py @@ -9,6 +9,7 @@ """ from datetime import datetime +from io import BytesIO import struct import warnings @@ -17,7 +18,6 @@ from pandas.util._decorators import Appender import pandas as pd -from pandas import compat from pandas.io.common import BaseIterator, get_filepath_or_buffer @@ -249,7 +249,7 @@ def __init__(self, filepath_or_buffer, index=None, encoding='ISO-8859-1', contents = contents.encode(self._encoding) except UnicodeEncodeError: pass - self.filepath_or_buffer = compat.BytesIO(contents) + self.filepath_or_buffer = BytesIO(contents) self._read_header() diff --git a/pandas/io/stata.py b/pandas/io/stata.py index 628f77856942d..c613a0837c82b 100644 --- a/pandas/io/stata.py +++ b/pandas/io/stata.py @@ -12,6 +12,7 @@ from collections import OrderedDict import datetime +from io import BytesIO import os import struct import sys @@ -23,7 +24,7 @@ from pandas._libs.lib import infer_dtype from pandas._libs.tslibs import NaT, Timestamp from pandas._libs.writers import max_len_string_array -from pandas.compat import BytesIO, lmap, lrange, lzip +from pandas.compat import lmap, lrange, lzip from pandas.util._decorators import Appender, deprecate_kwarg from pandas.core.dtypes.common import ( diff --git a/pandas/tests/dtypes/test_inference.py b/pandas/tests/dtypes/test_inference.py index cca40244f2f3d..ba5ac744ebf05 100644 --- a/pandas/tests/dtypes/test_inference.py +++ b/pandas/tests/dtypes/test_inference.py @@ -9,6 +9,7 @@ from datetime import date, datetime, time, timedelta from decimal import Decimal from fractions import Fraction +from io import StringIO from numbers import Number import re @@ -17,7 +18,7 @@ import pytz from pandas._libs import iNaT, lib, missing as libmissing -from pandas.compat import StringIO, lrange +from pandas.compat import lrange import pandas.util._test_decorators as td from pandas.core.dtypes import inference diff --git a/pandas/tests/extension/base/io.py b/pandas/tests/extension/base/io.py index 7ea62e4e9d678..22787c38b66fb 100644 --- a/pandas/tests/extension/base/io.py +++ b/pandas/tests/extension/base/io.py @@ -1,8 +1,8 @@ +from io import StringIO + import numpy as np import pytest -from pandas.compat import StringIO - import pandas as pd from .base import BaseExtensionTests diff --git a/pandas/tests/frame/test_block_internals.py b/pandas/tests/frame/test_block_internals.py index a9f31a40b5afa..bbb37dd842c55 100644 --- a/pandas/tests/frame/test_block_internals.py +++ b/pandas/tests/frame/test_block_internals.py @@ -1,13 +1,12 @@ # -*- coding: utf-8 -*- from datetime import datetime, timedelta +from io import StringIO import itertools import numpy as np import pytest -from pandas.compat import StringIO - import pandas as pd from pandas import ( Categorical, DataFrame, Series, Timestamp, compat, date_range, diff --git a/pandas/tests/frame/test_query_eval.py b/pandas/tests/frame/test_query_eval.py index 3e9f8094a225d..d323a732d4895 100644 --- a/pandas/tests/frame/test_query_eval.py +++ b/pandas/tests/frame/test_query_eval.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- - +from io import StringIO import operator import numpy as np import pytest -from pandas.compat import StringIO, lrange +from pandas.compat import lrange import pandas.util._test_decorators as td import pandas as pd diff --git a/pandas/tests/frame/test_replace.py b/pandas/tests/frame/test_replace.py index 42e752ea340f5..f44739e83267f 100644 --- a/pandas/tests/frame/test_replace.py +++ b/pandas/tests/frame/test_replace.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- from datetime import datetime +from io import StringIO import re import numpy as np import pytest -from pandas.compat import StringIO, lrange +from pandas.compat import lrange import pandas as pd from pandas import DataFrame, Index, Series, Timestamp, compat, date_range diff --git a/pandas/tests/frame/test_repr_info.py b/pandas/tests/frame/test_repr_info.py index e4f0b4c6459ae..1e2f87123a63d 100644 --- a/pandas/tests/frame/test_repr_info.py +++ b/pandas/tests/frame/test_repr_info.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from datetime import datetime, timedelta +from io import StringIO import re import sys import textwrap @@ -8,12 +9,11 @@ import numpy as np import pytest -from pandas.compat import PYPY, StringIO, lrange +from pandas.compat import PYPY, lrange import pandas as pd from pandas import ( - Categorical, DataFrame, Series, compat, date_range, option_context, - period_range) + Categorical, DataFrame, Series, date_range, option_context, period_range) from pandas.tests.frame.common import TestData import pandas.util.testing as tm @@ -494,7 +494,7 @@ def test_info_categorical_column(self): df.info(buf=buf) df2 = df[df['category'] == 'd'] - buf = compat.StringIO() + buf = StringIO() df2.info(buf=buf) def test_repr_categorical_dates_periods(self): diff --git a/pandas/tests/frame/test_to_csv.py b/pandas/tests/frame/test_to_csv.py index 7ae941addef6a..20623d98d7ef3 100644 --- a/pandas/tests/frame/test_to_csv.py +++ b/pandas/tests/frame/test_to_csv.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- import csv +from io import StringIO import os import numpy as np import pytest -from pandas.compat import StringIO, lmap, lrange +from pandas.compat import lmap, lrange from pandas.errors import ParserError import pandas as pd diff --git a/pandas/tests/groupby/test_apply.py b/pandas/tests/groupby/test_apply.py index d753556f9978d..91a1ea65b6e5d 100644 --- a/pandas/tests/groupby/test_apply.py +++ b/pandas/tests/groupby/test_apply.py @@ -1,4 +1,5 @@ from datetime import datetime +from io import StringIO import numpy as np import pytest @@ -24,9 +25,8 @@ def test_apply_issues(): 2011.05.18,04:00,1.40750 2011.05.18,05:00,1.40649""" - df = pd.read_csv( - compat.StringIO(s), header=None, names=['date', 'time', 'value'], - parse_dates=[['date', 'time']]) + df = pd.read_csv(StringIO(s), header=None, names=['date', 'time', 'value'], + parse_dates=[['date', 'time']]) df = df.set_index('date_time') expected = df.groupby(df.index.date).idxmax() @@ -35,8 +35,7 @@ def test_apply_issues(): # GH 5789 # don't auto coerce dates - df = pd.read_csv( - compat.StringIO(s), header=None, names=['date', 'time', 'value']) + df = pd.read_csv(StringIO(s), header=None, names=['date', 'time', 'value']) exp_idx = pd.Index( ['2011.05.16', '2011.05.17', '2011.05.18' ], dtype=object, name='date') diff --git a/pandas/tests/groupby/test_function.py b/pandas/tests/groupby/test_function.py index 64fa242e915ba..1bfe0c811d4a6 100644 --- a/pandas/tests/groupby/test_function.py +++ b/pandas/tests/groupby/test_function.py @@ -1,3 +1,4 @@ +from io import StringIO from string import ascii_lowercase import numpy as np @@ -494,7 +495,7 @@ def test_max_nan_bug(): -05-06,2013-05-06 00:00:00,,log.log -05-07,2013-05-07 00:00:00,OE,xlsx""" - df = pd.read_csv(compat.StringIO(raw), parse_dates=[0]) + df = pd.read_csv(StringIO(raw), parse_dates=[0]) gb = df.groupby('Date') r = gb[['File']].max() e = gb['File'].max().to_frame() diff --git a/pandas/tests/groupby/test_groupby.py b/pandas/tests/groupby/test_groupby.py index 4f1e9344c4336..885def32db046 100644 --- a/pandas/tests/groupby/test_groupby.py +++ b/pandas/tests/groupby/test_groupby.py @@ -2,11 +2,12 @@ from collections import OrderedDict, defaultdict from datetime import datetime from decimal import Decimal +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO, lmap, lrange, lzip +from pandas.compat import lmap, lrange, lzip from pandas.errors import PerformanceWarning import pandas as pd diff --git a/pandas/tests/groupby/test_timegrouper.py b/pandas/tests/groupby/test_timegrouper.py index a2f2c1392b251..62e1a087a41aa 100644 --- a/pandas/tests/groupby/test_timegrouper.py +++ b/pandas/tests/groupby/test_timegrouper.py @@ -1,14 +1,13 @@ """ test with the TimeGrouper / grouping with datetimes """ from datetime import datetime +from io import StringIO import numpy as np from numpy import nan import pytest import pytz -from pandas.compat import StringIO - import pandas as pd from pandas import DataFrame, Index, MultiIndex, Series, Timestamp, date_range from pandas.core.groupby.ops import BinGrouper diff --git a/pandas/tests/groupby/test_transform.py b/pandas/tests/groupby/test_transform.py index 45e7b3239c016..e865dc35c71b0 100644 --- a/pandas/tests/groupby/test_transform.py +++ b/pandas/tests/groupby/test_transform.py @@ -1,10 +1,10 @@ """ test with the .transform """ +from io import StringIO import numpy as np import pytest from pandas._libs import groupby -from pandas.compat import StringIO from pandas.core.dtypes.common import ensure_platform_int, is_timedelta64_dtype diff --git a/pandas/tests/indexes/test_base.py b/pandas/tests/indexes/test_base.py index 61d3a3cb65cd3..116a12c1c520b 100644 --- a/pandas/tests/indexes/test_base.py +++ b/pandas/tests/indexes/test_base.py @@ -2,6 +2,7 @@ from collections import defaultdict from datetime import datetime, timedelta +from io import StringIO import math import operator import re @@ -13,7 +14,7 @@ import pandas._config.config as cf from pandas._libs.tslib import Timestamp -from pandas.compat import PY36, StringIO, lrange, lzip +from pandas.compat import PY36, lrange, lzip from pandas.compat.numpy import np_datetime64_compat from pandas.core.dtypes.common import is_unsigned_integer_dtype diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index ae256a0fded2b..56401897afa94 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -1,11 +1,11 @@ """ test label based indexing with loc """ - +from io import StringIO from warnings import catch_warnings, filterwarnings import numpy as np import pytest -from pandas.compat import StringIO, lrange +from pandas.compat import lrange import pandas as pd from pandas import DataFrame, Series, Timestamp, date_range diff --git a/pandas/tests/io/formats/test_format.py b/pandas/tests/io/formats/test_format.py index 0c349f49d46d0..a960dcb9d164a 100644 --- a/pandas/tests/io/formats/test_format.py +++ b/pandas/tests/io/formats/test_format.py @@ -5,6 +5,7 @@ """ from datetime import datetime +from io import StringIO import itertools from operator import methodcaller import os @@ -19,8 +20,7 @@ import pytest import pytz -from pandas.compat import ( - StringIO, is_platform_32bit, is_platform_windows, lrange, lzip) +from pandas.compat import is_platform_32bit, is_platform_windows, lrange, lzip import pandas as pd from pandas import ( diff --git a/pandas/tests/io/formats/test_to_html.py b/pandas/tests/io/formats/test_to_html.py index d146e9c16e114..cb90b4edfb7c7 100644 --- a/pandas/tests/io/formats/test_to_html.py +++ b/pandas/tests/io/formats/test_to_html.py @@ -1,13 +1,13 @@ # -*- coding: utf-8 -*- from datetime import datetime -from io import open +from io import StringIO import re import numpy as np import pytest -from pandas.compat import StringIO, lrange +from pandas.compat import lrange import pandas as pd from pandas import DataFrame, Index, MultiIndex, option_context diff --git a/pandas/tests/io/json/test_pandas.py b/pandas/tests/io/json/test_pandas.py index dacb15af67083..9ca5bf95e5e08 100644 --- a/pandas/tests/io/json/test_pandas.py +++ b/pandas/tests/io/json/test_pandas.py @@ -2,13 +2,14 @@ # pylint: disable-msg=W0612,E1101 from collections import OrderedDict from datetime import timedelta +from io import StringIO import json import os import numpy as np import pytest -from pandas.compat import StringIO, is_platform_32bit, lrange +from pandas.compat import is_platform_32bit, lrange import pandas.util._test_decorators as td import pandas as pd diff --git a/pandas/tests/io/json/test_readlines.py b/pandas/tests/io/json/test_readlines.py index 0cbbe81e57e92..c1eae9e2a4110 100644 --- a/pandas/tests/io/json/test_readlines.py +++ b/pandas/tests/io/json/test_readlines.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -import pytest +from io import StringIO -from pandas.compat import StringIO +import pytest import pandas as pd from pandas import DataFrame, read_json diff --git a/pandas/tests/io/json/test_ujson.py b/pandas/tests/io/json/test_ujson.py index 126a6851ed482..e947100ba8605 100644 --- a/pandas/tests/io/json/test_ujson.py +++ b/pandas/tests/io/json/test_ujson.py @@ -7,6 +7,7 @@ import calendar import datetime import decimal +from io import StringIO import locale import math import re @@ -20,7 +21,6 @@ import pandas._libs.json as ujson from pandas._libs.tslib import Timestamp import pandas.compat as compat -from pandas.compat import StringIO from pandas import DataFrame, DatetimeIndex, Index, NaT, Series, date_range import pandas.util.testing as tm diff --git a/pandas/tests/io/msgpack/test_pack.py b/pandas/tests/io/msgpack/test_pack.py index a5fb292a451f5..18a370084ce8b 100644 --- a/pandas/tests/io/msgpack/test_pack.py +++ b/pandas/tests/io/msgpack/test_pack.py @@ -1,11 +1,10 @@ # coding: utf-8 from collections import OrderedDict +from io import BytesIO import struct import pytest -from pandas import compat - from pandas.io.msgpack import Packer, Unpacker, packb, unpackb @@ -37,8 +36,7 @@ def testPackUnicode(self): assert re == td packer = Packer(encoding='utf-8') data = packer.pack(td) - re = Unpacker( - compat.BytesIO(data), encoding='utf-8', use_list=1).unpack() + re = Unpacker(BytesIO(data), encoding='utf-8', use_list=1).unpack() assert re == td def testPackUTF32(self): @@ -93,7 +91,7 @@ def testPackFloat(self): 1.0, use_single_float=False) == b'\xcb' + struct.pack('>d', 1.0) def testArraySize(self, sizes=[0, 5, 50, 1000]): - bio = compat.BytesIO() + bio = BytesIO() packer = Packer() for size in sizes: bio.write(packer.pack_array_header(size)) @@ -112,7 +110,7 @@ def test_manualreset(self, sizes=[0, 5, 50, 1000]): for i in range(size): packer.pack(i) - bio = compat.BytesIO(packer.bytes()) + bio = BytesIO(packer.bytes()) unpacker = Unpacker(bio, use_list=1) for size in sizes: assert unpacker.unpack() == list(range(size)) @@ -121,7 +119,7 @@ def test_manualreset(self, sizes=[0, 5, 50, 1000]): assert packer.bytes() == b'' def testMapSize(self, sizes=[0, 5, 50, 1000]): - bio = compat.BytesIO() + bio = BytesIO() packer = Packer() for size in sizes: bio.write(packer.pack_map_header(size)) diff --git a/pandas/tests/io/msgpack/test_sequnpack.py b/pandas/tests/io/msgpack/test_sequnpack.py index 91f5778a7ce6c..4a767c52d69ce 100644 --- a/pandas/tests/io/msgpack/test_sequnpack.py +++ b/pandas/tests/io/msgpack/test_sequnpack.py @@ -1,9 +1,8 @@ # coding: utf-8 +from io import BytesIO import pytest -from pandas import compat - from pandas.io.msgpack import BufferFull, OutOfData, Unpacker @@ -85,7 +84,7 @@ def test_readbytes(self): assert unpacker.unpack() == ord(b'r') # Test buffer refill - unpacker = Unpacker(compat.BytesIO(b'foobar'), read_size=3) + unpacker = Unpacker(BytesIO(b'foobar'), read_size=3) assert unpacker.unpack() == ord(b'f') assert unpacker.read_bytes(3) == b'oob' assert unpacker.unpack() == ord(b'a') diff --git a/pandas/tests/io/parser/test_c_parser_only.py b/pandas/tests/io/parser/test_c_parser_only.py index 0e10c3f3f860e..22157a742bacc 100644 --- a/pandas/tests/io/parser/test_c_parser_only.py +++ b/pandas/tests/io/parser/test_c_parser_only.py @@ -7,7 +7,7 @@ further arguments when parsing. """ -from io import TextIOWrapper +from io import BytesIO, StringIO, TextIOWrapper import mmap import os import tarfile @@ -15,7 +15,7 @@ import numpy as np import pytest -from pandas.compat import BytesIO, StringIO, lrange +from pandas.compat import lrange from pandas.errors import ParserError import pandas.util._test_decorators as td diff --git a/pandas/tests/io/parser/test_comment.py b/pandas/tests/io/parser/test_comment.py index 299a04f876bd1..5ed8e6ea3a6ac 100644 --- a/pandas/tests/io/parser/test_comment.py +++ b/pandas/tests/io/parser/test_comment.py @@ -4,12 +4,11 @@ Tests that comments are properly handled during parsing for all of the parsers defined in parsers.py """ +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO - from pandas import DataFrame import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_common.py b/pandas/tests/io/parser/test_common.py index b9f6f2ee8c7c1..3034d54c52c45 100644 --- a/pandas/tests/io/parser/test_common.py +++ b/pandas/tests/io/parser/test_common.py @@ -9,6 +9,7 @@ from collections import OrderedDict import csv from datetime import datetime +from io import BytesIO, StringIO import os import platform from tempfile import TemporaryFile @@ -17,7 +18,7 @@ import pytest from pandas._libs.tslib import Timestamp -from pandas.compat import BytesIO, StringIO, lrange +from pandas.compat import lrange from pandas.errors import DtypeWarning, EmptyDataError, ParserError from pandas import DataFrame, Index, MultiIndex, Series, compat, concat diff --git a/pandas/tests/io/parser/test_converters.py b/pandas/tests/io/parser/test_converters.py index 47bbae0274fd3..a654343f9352b 100644 --- a/pandas/tests/io/parser/test_converters.py +++ b/pandas/tests/io/parser/test_converters.py @@ -4,11 +4,12 @@ Tests column conversion functionality during parsing for all of the parsers defined in parsers.py """ +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO, lmap, parse_date +from pandas.compat import lmap, parse_date import pandas as pd from pandas import DataFrame, Index diff --git a/pandas/tests/io/parser/test_dialect.py b/pandas/tests/io/parser/test_dialect.py index 5392f793b361c..4665fbaf3414a 100644 --- a/pandas/tests/io/parser/test_dialect.py +++ b/pandas/tests/io/parser/test_dialect.py @@ -6,10 +6,10 @@ """ import csv +from io import StringIO import pytest -from pandas.compat import StringIO from pandas.errors import ParserWarning from pandas import DataFrame diff --git a/pandas/tests/io/parser/test_dtypes.py b/pandas/tests/io/parser/test_dtypes.py index caa03fc3685f6..325def2bb8add 100644 --- a/pandas/tests/io/parser/test_dtypes.py +++ b/pandas/tests/io/parser/test_dtypes.py @@ -4,13 +4,12 @@ Tests dtype specification during parsing for all of the parsers defined in parsers.py """ - +from io import StringIO import os import numpy as np import pytest -from pandas.compat import StringIO from pandas.errors import ParserWarning from pandas.core.dtypes.dtypes import CategoricalDtype diff --git a/pandas/tests/io/parser/test_header.py b/pandas/tests/io/parser/test_header.py index b6854e0868aa0..b2304350f6626 100644 --- a/pandas/tests/io/parser/test_header.py +++ b/pandas/tests/io/parser/test_header.py @@ -6,11 +6,11 @@ """ from collections import namedtuple +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO from pandas.errors import ParserError from pandas import DataFrame, Index, MultiIndex diff --git a/pandas/tests/io/parser/test_index_col.py b/pandas/tests/io/parser/test_index_col.py index b1e02df693932..9d2ebf950c535 100644 --- a/pandas/tests/io/parser/test_index_col.py +++ b/pandas/tests/io/parser/test_index_col.py @@ -5,11 +5,10 @@ is properly handled or inferred during parsing for all of the parsers defined in parsers.py """ +from io import StringIO import pytest -from pandas.compat import StringIO - from pandas import DataFrame, Index, MultiIndex import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_mangle_dupes.py b/pandas/tests/io/parser/test_mangle_dupes.py index 0efc0c2c13557..e0ac7dc6e4d78 100644 --- a/pandas/tests/io/parser/test_mangle_dupes.py +++ b/pandas/tests/io/parser/test_mangle_dupes.py @@ -5,11 +5,10 @@ CSV engine. In general, the expected result is that they are either thoroughly de-duplicated (if mangling requested) or ignored otherwise. """ +from io import StringIO import pytest -from pandas.compat import StringIO - from pandas import DataFrame import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_multi_thread.py b/pandas/tests/io/parser/test_multi_thread.py index bc3eff9598380..2e6cdd3ab2240 100644 --- a/pandas/tests/io/parser/test_multi_thread.py +++ b/pandas/tests/io/parser/test_multi_thread.py @@ -4,13 +4,11 @@ Tests multithreading behaviour for reading and parsing files for each parser defined in parsers.py """ - +from io import BytesIO from multiprocessing.pool import ThreadPool import numpy as np -from pandas.compat import BytesIO - import pandas as pd from pandas import DataFrame import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_na_values.py b/pandas/tests/io/parser/test_na_values.py index e6f44eccb0762..4fe73c65cecf7 100644 --- a/pandas/tests/io/parser/test_na_values.py +++ b/pandas/tests/io/parser/test_na_values.py @@ -4,12 +4,11 @@ Tests that NA values are properly handled during parsing for all of the parsers defined in parsers.py """ +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO - from pandas import DataFrame, Index, MultiIndex import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_network.py b/pandas/tests/io/parser/test_network.py index cb5453f20b525..b36508d89d770 100644 --- a/pandas/tests/io/parser/test_network.py +++ b/pandas/tests/io/parser/test_network.py @@ -4,12 +4,12 @@ Tests parsers ability to read and parse non-local files and hence require a network connection to be read. """ +from io import BytesIO, StringIO import logging import numpy as np import pytest -from pandas.compat import BytesIO, StringIO import pandas.util._test_decorators as td from pandas import DataFrame diff --git a/pandas/tests/io/parser/test_parse_dates.py b/pandas/tests/io/parser/test_parse_dates.py index ffc8af09bf239..f719035a10609 100644 --- a/pandas/tests/io/parser/test_parse_dates.py +++ b/pandas/tests/io/parser/test_parse_dates.py @@ -6,6 +6,7 @@ """ from datetime import date, datetime +from io import StringIO import numpy as np import pytest @@ -13,7 +14,7 @@ from pandas._libs.tslib import Timestamp from pandas._libs.tslibs import parsing -from pandas.compat import StringIO, lrange, parse_date +from pandas.compat import lrange, parse_date from pandas.compat.numpy import np_array_datetime64_compat import pandas as pd diff --git a/pandas/tests/io/parser/test_python_parser_only.py b/pandas/tests/io/parser/test_python_parser_only.py index ad50f729a69f9..3c249c9d7b72c 100644 --- a/pandas/tests/io/parser/test_python_parser_only.py +++ b/pandas/tests/io/parser/test_python_parser_only.py @@ -8,10 +8,10 @@ """ import csv +from io import BytesIO, StringIO import pytest -from pandas.compat import BytesIO, StringIO from pandas.errors import ParserError from pandas import DataFrame, Index, MultiIndex diff --git a/pandas/tests/io/parser/test_quoting.py b/pandas/tests/io/parser/test_quoting.py index 961b276c2004f..b490b5213e8cd 100644 --- a/pandas/tests/io/parser/test_quoting.py +++ b/pandas/tests/io/parser/test_quoting.py @@ -6,10 +6,10 @@ """ import csv +from io import StringIO import pytest -from pandas.compat import StringIO from pandas.errors import ParserError from pandas import DataFrame diff --git a/pandas/tests/io/parser/test_read_fwf.py b/pandas/tests/io/parser/test_read_fwf.py index 72360a8a7468d..0928c332cb48e 100644 --- a/pandas/tests/io/parser/test_read_fwf.py +++ b/pandas/tests/io/parser/test_read_fwf.py @@ -7,12 +7,11 @@ """ from datetime import datetime +from io import BytesIO, StringIO import numpy as np import pytest -from pandas.compat import BytesIO, StringIO - import pandas as pd from pandas import DataFrame, DatetimeIndex import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_skiprows.py b/pandas/tests/io/parser/test_skiprows.py index c469813f1b71e..18a0cbd18fd43 100644 --- a/pandas/tests/io/parser/test_skiprows.py +++ b/pandas/tests/io/parser/test_skiprows.py @@ -6,11 +6,12 @@ """ from datetime import datetime +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO, lrange +from pandas.compat import lrange from pandas.errors import EmptyDataError from pandas import DataFrame, Index diff --git a/pandas/tests/io/parser/test_textreader.py b/pandas/tests/io/parser/test_textreader.py index 9195b577a4c8f..c5bac4724d70b 100644 --- a/pandas/tests/io/parser/test_textreader.py +++ b/pandas/tests/io/parser/test_textreader.py @@ -4,7 +4,7 @@ Tests the TextReader class in parsers.pyx, which is integral to the C engine in parsers.py """ - +from io import BytesIO, StringIO import os import numpy as np @@ -14,7 +14,6 @@ import pandas._libs.parsers as parser from pandas._libs.parsers import TextReader import pandas.compat as compat -from pandas.compat import BytesIO, StringIO from pandas import DataFrame import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_unsupported.py b/pandas/tests/io/parser/test_unsupported.py index 8c6dbd64c785d..21949586a37ef 100644 --- a/pandas/tests/io/parser/test_unsupported.py +++ b/pandas/tests/io/parser/test_unsupported.py @@ -8,10 +8,10 @@ Ultimately, the goal is to remove test cases from this test suite as new feature support is added to the parsers. """ +from io import StringIO import pytest -from pandas.compat import StringIO from pandas.errors import ParserError import pandas.util.testing as tm diff --git a/pandas/tests/io/parser/test_usecols.py b/pandas/tests/io/parser/test_usecols.py index 8367c32f25d3f..4e1f3e9be5086 100644 --- a/pandas/tests/io/parser/test_usecols.py +++ b/pandas/tests/io/parser/test_usecols.py @@ -4,12 +4,12 @@ Tests the usecols functionality during parsing for all of the parsers defined in parsers.py """ +from io import StringIO import numpy as np import pytest from pandas._libs.tslib import Timestamp -from pandas.compat import StringIO from pandas import DataFrame, Index import pandas.util.testing as tm diff --git a/pandas/tests/io/sas/test_sas.py b/pandas/tests/io/sas/test_sas.py index 34bca1e5b74a1..0e0abe0dae7d1 100644 --- a/pandas/tests/io/sas/test_sas.py +++ b/pandas/tests/io/sas/test_sas.py @@ -1,6 +1,6 @@ -import pytest +from io import StringIO -from pandas.compat import StringIO +import pytest from pandas import read_sas import pandas.util.testing as tm diff --git a/pandas/tests/io/test_common.py b/pandas/tests/io/test_common.py index f89586068ff93..21479c57fb65a 100644 --- a/pandas/tests/io/test_common.py +++ b/pandas/tests/io/test_common.py @@ -1,12 +1,13 @@ """ Tests for the pandas.io.common functionalities """ +from io import StringIO import mmap import os import pytest -from pandas.compat import StringIO, is_platform_windows +from pandas.compat import is_platform_windows import pandas.util._test_decorators as td import pandas as pd diff --git a/pandas/tests/io/test_excel.py b/pandas/tests/io/test_excel.py index e02fa1d5edc74..1377888a58d07 100644 --- a/pandas/tests/io/test_excel.py +++ b/pandas/tests/io/test_excel.py @@ -3,6 +3,7 @@ from datetime import date, datetime, time, timedelta from distutils.version import LooseVersion from functools import partial +from io import BytesIO import os import warnings @@ -10,7 +11,7 @@ from numpy import nan import pytest -from pandas.compat import PY36, BytesIO, iteritems +from pandas.compat import PY36, iteritems import pandas.util._test_decorators as td import pandas as pd diff --git a/pandas/tests/io/test_gcs.py b/pandas/tests/io/test_gcs.py index ec0631e748dfc..86e56248ae9d3 100644 --- a/pandas/tests/io/test_gcs.py +++ b/pandas/tests/io/test_gcs.py @@ -1,8 +1,8 @@ +from io import StringIO + import numpy as np import pytest -from pandas.compat import StringIO - from pandas import DataFrame, date_range, read_csv from pandas.util import _test_decorators as td from pandas.util.testing import assert_frame_equal diff --git a/pandas/tests/io/test_html.py b/pandas/tests/io/test_html.py index 36b2ac28c067e..42b13745b90b3 100644 --- a/pandas/tests/io/test_html.py +++ b/pandas/tests/io/test_html.py @@ -1,5 +1,6 @@ from functools import partial from importlib import reload +from io import BytesIO, StringIO import os import re import threading @@ -8,7 +9,7 @@ from numpy.random import rand import pytest -from pandas.compat import BytesIO, StringIO, is_platform_windows +from pandas.compat import is_platform_windows from pandas.errors import ParserError import pandas.util._test_decorators as td diff --git a/pandas/tests/io/test_packers.py b/pandas/tests/io/test_packers.py index 90fb2b15162e5..c24adcbf29477 100644 --- a/pandas/tests/io/test_packers.py +++ b/pandas/tests/io/test_packers.py @@ -1,6 +1,7 @@ import datetime from distutils.version import LooseVersion import glob +from io import BytesIO import os from warnings import catch_warnings @@ -113,7 +114,7 @@ def test_string_io(self): tm.assert_frame_equal(result, df) s = df.to_msgpack() - result = read_msgpack(compat.BytesIO(s)) + result = read_msgpack(BytesIO(s)) tm.assert_frame_equal(result, df) s = to_msgpack(None, df) diff --git a/pandas/tests/io/test_pytables.py b/pandas/tests/io/test_pytables.py index e45ca1afdcef9..f7b81d1b07694 100644 --- a/pandas/tests/io/test_pytables.py +++ b/pandas/tests/io/test_pytables.py @@ -2,6 +2,7 @@ import datetime from datetime import timedelta from distutils.version import LooseVersion +from io import BytesIO import os import tempfile from warnings import catch_warnings, simplefilter @@ -10,8 +11,7 @@ import pytest from pandas.compat import ( - PY35, PY36, BytesIO, is_platform_little_endian, is_platform_windows, - lrange) + PY35, PY36, is_platform_little_endian, is_platform_windows, lrange) import pandas.util._test_decorators as td from pandas.core.dtypes.common import is_categorical_dtype diff --git a/pandas/tests/io/test_s3.py b/pandas/tests/io/test_s3.py index 32eae8ed328f4..d347e08d0500f 100644 --- a/pandas/tests/io/test_s3.py +++ b/pandas/tests/io/test_s3.py @@ -1,6 +1,6 @@ -import pytest +from io import BytesIO -from pandas.compat import BytesIO +import pytest from pandas import read_csv diff --git a/pandas/tests/io/test_sql.py b/pandas/tests/io/test_sql.py index 959682703ec2b..637697aa2ffcb 100644 --- a/pandas/tests/io/test_sql.py +++ b/pandas/tests/io/test_sql.py @@ -19,13 +19,13 @@ import csv from datetime import date, datetime, time +from io import StringIO import sqlite3 import warnings import numpy as np import pytest -import pandas.compat as compat from pandas.compat import PY36, lrange from pandas.core.dtypes.common import ( @@ -1939,7 +1939,7 @@ def psql_insert_copy(table, conn, keys, data_iter): # gets a DBAPI connection that can provide a cursor dbapi_conn = conn.connection with dbapi_conn.cursor() as cur: - s_buf = compat.StringIO() + s_buf = StringIO() writer = csv.writer(s_buf) writer.writerows(data_iter) s_buf.seek(0) diff --git a/pandas/tests/resample/test_datetime_index.py b/pandas/tests/resample/test_datetime_index.py index 0c6ef9ebc75fe..51a5c992e894b 100644 --- a/pandas/tests/resample/test_datetime_index.py +++ b/pandas/tests/resample/test_datetime_index.py @@ -1,11 +1,11 @@ from datetime import datetime, timedelta from functools import partial +from io import StringIO import numpy as np import pytest import pytz -from pandas.compat import StringIO from pandas.errors import UnsupportedFunctionCall import pandas as pd diff --git a/pandas/tests/reshape/test_concat.py b/pandas/tests/reshape/test_concat.py index 6036ca1a3e6cf..5080db9354a1f 100644 --- a/pandas/tests/reshape/test_concat.py +++ b/pandas/tests/reshape/test_concat.py @@ -2,6 +2,7 @@ import datetime as dt from datetime import datetime from decimal import Decimal +from io import StringIO from itertools import combinations from warnings import catch_warnings @@ -10,7 +11,7 @@ from numpy.random import randn import pytest -from pandas.compat import StringIO, iteritems +from pandas.compat import iteritems from pandas.core.dtypes.dtypes import CategoricalDtype diff --git a/pandas/tests/series/test_io.py b/pandas/tests/series/test_io.py index fbf34dbde7c62..20cc05f9a5cee 100644 --- a/pandas/tests/series/test_io.py +++ b/pandas/tests/series/test_io.py @@ -3,12 +3,11 @@ import collections from datetime import datetime +from io import StringIO import numpy as np import pytest -from pandas.compat import StringIO - import pandas as pd from pandas import DataFrame, Series import pandas.util.testing as tm diff --git a/pandas/tests/series/test_timeseries.py b/pandas/tests/series/test_timeseries.py index 0f7902aeefe44..02186a5bb5bd4 100644 --- a/pandas/tests/series/test_timeseries.py +++ b/pandas/tests/series/test_timeseries.py @@ -2,13 +2,14 @@ # pylint: disable-msg=E1101,W0612 from datetime import datetime, time, timedelta +from io import StringIO import numpy as np import pytest from pandas._libs.tslib import iNaT from pandas._libs.tslibs.np_datetime import OutOfBoundsDatetime -from pandas.compat import StringIO, lrange, product +from pandas.compat import lrange, product from pandas.errors import NullFrequencyError import pandas.util._test_decorators as td diff --git a/pandas/tests/test_base.py b/pandas/tests/test_base.py index 1aca17f6b6d1c..9539519604a24 100644 --- a/pandas/tests/test_base.py +++ b/pandas/tests/test_base.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from datetime import datetime, timedelta +from io import StringIO import re import sys @@ -7,7 +8,7 @@ import pytest from pandas._libs.tslib import iNaT -from pandas.compat import PYPY, StringIO +from pandas.compat import PYPY from pandas.compat.numpy import np_array_datetime64_compat from pandas.core.dtypes.common import ( diff --git a/pandas/tests/test_multilevel.py b/pandas/tests/test_multilevel.py index bc58606965da1..3157d800a649c 100644 --- a/pandas/tests/test_multilevel.py +++ b/pandas/tests/test_multilevel.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # pylint: disable-msg=W0612,E1101,W0141 import datetime +from io import StringIO import itertools from warnings import catch_warnings, simplefilter @@ -9,7 +10,7 @@ import pytest import pytz -from pandas.compat import StringIO, lrange, lzip, product as cart_product +from pandas.compat import lrange, lzip, product as cart_product from pandas.core.dtypes.common import is_float_dtype, is_integer_dtype