Python StringIO和pandas阅读

Python StringIO和pandas阅读,python,pandas,Python,Pandas,我试着将StringIO和BytesIO与熊猫混为一谈,并努力解决一些基本问题。例如,我无法让下面的“输出”正常工作,而下面的“输出2”正常工作。但是“输出”更接近于我正在尝试的真实世界的例子。“output2”中的方法来自一个古老的熊猫示例,但对我来说并不是一个真正有用的方法 import io # note for python 3 only # in python2 need to import StringIO output = io.StringIO()

我试着将StringIO和BytesIO与熊猫混为一谈,并努力解决一些基本问题。例如,我无法让下面的“输出”正常工作,而下面的“输出2”正常工作。但是“输出”更接近于我正在尝试的真实世界的例子。“output2”中的方法来自一个古老的熊猫示例,但对我来说并不是一个真正有用的方法

import io   # note for python 3 only
            # in python2 need to import StringIO

output = io.StringIO()
output.write('x,y\n')
output.write('1,2\n')

output2 = io.StringIO("""x,y
1,2
""")
它们在类型和内容上似乎是相同的:

type(output) == type(output2)
Out[159]: True

output.getvalue() == output2.getvalue()
Out[160]: True
但不,不一样:

output == output2
Out[161]: False
更多关于我试图解决的问题:

pd.read_csv(output)   # ValueError: No columns to parse from file
pd.read_csv(output2)  # works fine, same as reading from a file

io.StringIO
这里的行为就像一个文件——您对它进行了写入,现在文件指针指向了它的末尾。当您尝试在这之后读取它时,在您编写的点之后没有任何内容,因此:没有要解析的列

相反,就像处理普通文件一样,
seek
开始,然后读取:

>>> output = io.StringIO()
>>> output.write('x,y\n')
4
>>> output.write('1,2\n')
4
>>> output.seek(0)
0
>>> pd.read_csv(output)
   x  y
0  1  2

实际上,对于一个普通的文件,我并没有寻找(至少明确地),我只是键入“read_csv(file)”。但是谢谢,这很有效@约翰:我的意思是“就像你在给一个普通的文件写过信后试图从中读取一样”。