在python3中的StringIO
我正在使用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
当我写入import StringIO
它说没有这样的模块。
当我写入导入StringIO它说没有这样的模块。
从Python 3.0中的新function :
StringIO
和cStringIO
模块不见了。 相反,导入io
模块,分别使用io.StringIO
或io.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))