在python3中的StringIO

我正在使用Python 3.2.1,我无法导入StringIO模块。 我使用io.StringIO ,它的工作原理,但我不能用这样的numpygenfromtxt

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

我得到以下错误:

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

当我写入import StringIO它说没有这样的模块。

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

从Python 3.0中的新function :

StringIOcStringIO模块不见了。 相反,导入io模块,分别使用io.StringIOio.BytesIO作为文本和数据。


解决某些Python 2代码在Python 3中工作的一种可能有用的方法(警告emptor):

 try: from StringIO import StringIO except ImportError: from io import StringIO 

注意:这个例子可能与问题的主要问题相关,并且只包含在一般处理缺less的StringIO模块时要考虑的事项。 对于更直接的解决scheme, TypeError: Can't convert 'bytes' object to str implicitly消息TypeError: Can't convert 'bytes' object to str implicitly ,看到这个答案 。

在Python 3中, numpy.genfromtxt需要一个字节stream。 使用以下内容:

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

在我的情况下,我用了:

从io导入StringIO

谢谢你OP的问题,罗马你的回答。 我不得不寻找一点,find这个; 我希望以下帮助他人。

Python 2.7

请参阅: https : //docs.scipy.org/doc/numpy-dev/user/basics.io.genfromtxt.html

 import numpy as np from StringIO import StringIO data = "1, abc , 2\n 3, xxx, 4" print type(data) """ <type 'str'> """ print '\n', np.genfromtxt(StringIO(data), delimiter=",", dtype="|S3", autostrip=True) """ [['1' 'abc' '2'] ['3' 'xxx' '4']] """ print '\n', type(data) """ <type 'str'> """ print '\n', np.genfromtxt(StringIO(data), delimiter=",", autostrip=True) """ [[ 1. nan 2.] [ 3. nan 4.]] """ 

Python 3.5:

 import numpy as np from io import StringIO import io data = "1, abc , 2\n 3, xxx, 4" #print(data) """ 1, abc , 2 3, xxx, 4 """ #print(type(data)) """ <class 'str'> """ #np.genfromtxt(StringIO(data), delimiter=",", autostrip=True) # TypeError: Can't convert 'bytes' object to str implicitly print('\n') print(np.genfromtxt(io.BytesIO(data.encode()), delimiter=",", dtype="|S3", autostrip=True)) """ [[b'1' b'abc' b'2'] [b'3' b'xxx' b'4']] """ print('\n') print(np.genfromtxt(io.BytesIO(data.encode()), delimiter=",", autostrip=True)) """ [[ 1. nan 2.] [ 3. nan 4.]] """ 

在旁边:

dtype =“| Sx”,其中x = {1,2,3,…}中的任何一个:

dtypes。 Python中S1和S2的区别

“| S1和| S2string是数据types描述符;第一个意思是数组保存长度为1,长度为2的第二个string…”

您可以使用六个模块中的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可能比genfromtxt更好的名字。

尝试这个

从StringIO导入StringIO

x =“1 3 \ n 4.5 8”

numpy.genfromtxt(StringIO的(X))