我使用的是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'

当前回答

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

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

其他回答

谢谢OP的问题,谢谢Roman的回答。我费了好大劲才找到这个;我希望下面的内容能对其他人有所帮助。

Python 2.7

参见:https://docs.scipy.org/doc/numpy/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和|S2字符串是数据类型描述符;第一个表示数组包含长度为1的字符串,第二个长度为2的字符串. ...”

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

from io import StringIO

我希望这能满足你的要求

import PyPDF4
import io

pdfFile = open(r'test.pdf', 'rb')
pdfReader = PyPDF4.PdfFileReader(pdfFile)
pageObj = pdfReader.getPage(1)
pagetext = pageObj.extractText()

for line in io.StringIO(pagetext):
    print(line)

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

import six
import numpy

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

当我写导入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,请参阅这个答案。