StringIO — это файлоподобный объект строкового буфера, который мы используем при чтении кадра данных pandas из текста, например. "Как создать Pandas DataFrame из строки?" а>
Какой из этих двух импортов мы должны использовать для StringIO (в pandas)? Это давний вопрос, который так и не был решен в течение четырех лет.
StringIO.StringIO
(Python 2) /io.StringIO
(Python 3)- Advantages: more stable for futureproofing code, but forces us to version-fork, e.g. see code at bottom from EmilH.
pandas.compat.StringIO
- pandas.compat is a 2/3 compatibility package ("without the need for 2to3") introduced back in 0.13.0 (Jan 2014)
- пакет pandas.compat по-прежнему помечен как "частный" начиная с версии 0.22 и не планирует делать «общедоступными», говорит «Предупреждение. Модули верхнего уровня pandas.core, pandas.compat и pandas.util считаются ЧАСТНЫМИ. Стабильность функциональности этих модулей не гарантируется. " хотя они практически не ломались с версии 0.13
- источник pandas.compat определяет импорт
builtins, StringIO/cStringIO, BytesIO, cPickle, httplib
, версии диапазона итератора, фильтра, карты и zip, а также другие необходимые элементы для совместимости с Python 3 — см. 0.13.0 что нового
Код разветвления версии 2/3 для импорта из стандарта (от EmilH):
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
# Note: but this is very much a poor-man's version of pandas.compat, which contains much much more
Примечание:
pandas.compat
существует с pandas 0.13.0 (январь 2014 г.) как подпакет внутри pandas.- он также, похоже, был выпущен как отдельный пакет: 0.1.0 (10 июня 2017 г.) и 0.1.1 (10 июня 2017 г.)
pandas.compat
. Нам даже не нужно, чтобы все внутриpandas.compat
было стабильным, только те идентификаторы, которые я назвал, но в любом случае оно было стабильным с тех пор, как конец 2015 года, поэтому предупреждение слишком серьезное. - person smci   schedule 13.05.2018StringIO
). Но независимо от мнения разработчиков pandas: какой из этих двух импортов мы должны использовать для StringIO (внутри pandas)? ответ по-прежнему основан на мнении. Если вопрос звучит так: Существует ли официально рекомендуемый способ использованияStringIO
(в пандах)? Это не будет основано на мнении, но при чтении документации в настоящее время будет рекомендовано не использоватьpandas.compat
(несмотря на это, возможно, более чистый способ заполучитьStringIO
). - person Emil H   schedule 14.05.2018pandas.compat
согласно команде разработчиков pandas. (Не старая «официальная рекомендация» документа, а документ о том, что явно устарело на 3+ года). Пожалуйста, посмотрите ссылки на github для кода и проблем, которые я вам процитировал. Если текущий код не согласуется с документом 4-летней давности, игнорируйте документ. Это не первый раз, когда документация пакета отстает от реальности его кода или github на годы. - person smci   schedule 14.05.2018