我使用的是Python 3.2.1,我不能导入StringIO模块。我使用 io。StringIO和它的工作,但我不能使用numpy的genfromtxt像这样:

x="1 3\n 4.5 8"        
numpy.genfromtxt(io.StringIO(x))

我得到以下错误:

TypeError: Can't convert 'bytes' object to str implicitly  

当我输入StringIO时,它会说

ImportError: No module named 'StringIO'

当前回答

在我的例子中,我使用了:

from io import StringIO

其他回答

在Python 3中numpy。genfromttxt需要一个字节流。使用以下方法:

numpy.genfromtxt(io.BytesIO(x.encode()))

当我写导入StringIO时,它说没有这样的模块。

Python 3.0新增功能:

StringIO和cStringIO模块消失了。相反,导入io . xml文件 模块并使用io。StringIO或io。BytesIO用于文本和数据 分别。

.


修复一些Python 2代码,使其在Python 3中也能正常工作的一个可能有用的方法(买者自负):

try:
    from StringIO import StringIO ## for Python 2
except ImportError:
    from io import StringIO ## for Python 3

注意:这个例子可能与问题的主要问题无关,只是作为在处理缺少的StringIO模块时需要考虑的问题。对于更直接的解决方案,消息TypeError:不能隐式地将'bytes'对象转换为str,请参阅这个答案。

你可以从六个模块中使用StringIO:

import six
import numpy

x = "1 3\n 4.5 8"
numpy.genfromtxt(six.StringIO(x))

为了从这里举例子 使用Python 3.5.2,你可以重写如下:

import io
data =io.BytesIO(b"1, 2, 3\n4, 5, 6") 
import numpy
numpy.genfromtxt(data, delimiter=",")

更改的原因可能是文件的内容是数据(字节),直到以某种方式解码才成为文本。Genfrombytes可能是一个比genfromttxt更好的名字。

在我的例子中,我使用了:

from io import StringIO