Ik gebruik Python 3.2.1 en ik kan de StringIO
module niet importeren. Ik gebruik
io.StringIO
en het werkt, maar ik kan het niet gebruiken met numpy
's genfromtxt
zoals dit:
x="1 3\n 4.5 8"
numpy.genfromtxt(io.StringIO(x))
Ik krijg de volgende foutmelding:
TypeError: Can't convert 'bytes' object to str implicitly
en wanneer ik import StringIO
schrijf staat er
ImportError: No module named 'StringIO'
wanneer ik import StringIO schrijf, zegt het dat er geen dergelijke module is.
De
StringIO
encStringIO
modules zijn verdwenen. In plaats daarvan, importeer je deio
module en gebruikio.StringIO
ofio.BytesIO
voor tekst en data respectievelijk.
.
Een mogelijk bruikbare methode om wat Python 2 code te repareren zodat het ook in Python 3 werkt (caveat emptor):
try:
from StringIO import StringIO ## for Python 2
except ImportError:
from io import StringIO ## for Python 3
Opmerking: Dit voorbeeld is misschien niet relevant voor het hoofdprobleem van de vraag en is alleen opgenomen als iets om te overwegen bij het generiek aanpakken van de ontbrekende
StringIO
module. Voor een meer directe oplossing is de boodschapTypeError: Can't convert 'bytes' object to str implicitly
, zie dit antwoord.
In mijn geval heb ik gebruikt:
from io import StringIO
Op Python 3 verwacht numpy.genfromtxt
een bytes stream. Gebruik het volgende:
numpy.genfromtxt(io.BytesIO(x.encode()))