我有一个数据框架。我想把这个数据帧从excel文件写入csv文件,而不把它保存到磁盘。看起来StringIO()是一个明确的解决方案。然后我想用open()从内存中打开像对象一样的文件,但得到了一个类型错误。我如何得到这个类型错误,并读取内存中的csv文件与open()?或者,实际上,假设open()会工作是错误的吗?
TypeError: expected str, bytes or os.PathLike object, not StringIO
错误引用下面的行。
f = open(writer_file)
为了得到一个合适的例子,我必须打开文件"pandas_example"在创造。然后我删除了一行,然后代码运行到一个空行。
from pandas import util
df = util.testing.makeDataFrame()
df.to_excel('pandas_example.xlsx')
df_1 = pd.read_excel('pandas_example.xlsx')
writer_file = io.StringIO()
write_to_the_in_mem_file = csv.writer(writer_file, dialect='excel', delimiter=',')
write_to_the_in_mem_file.writerow(df_1)
f = open(writer_file)
while f.readline() not in (',,,,,,,,,,,,,,,,,,n', 'n'):
pass
final_df = pd.read_csv(f, header=None)
f.close()
把writer_file
看作是从open()
返回的,你不需要再打开它。
例如:
import pandas as pd
from pandas import util
import io
# Create test file
df = util.testing.makeDataFrame()
df.to_excel('pandas_example.xlsx')
df_1 = pd.read_excel('pandas_example.xlsx')
writer_file = io.StringIO()
df_1.to_csv(writer_file)
writer_file.seek(0) # Rewind back to the start
for line in writer_file:
print(line.strip())
to_csv()
调用将数据帧以CSV格式写入内存文件。
After
writer_file = io.StringIO()
,writer_file
已经是一个类文件对象。它已经有一个readline
方法,以及read
,write
,seek
等。参见io.TextIOBase
,io.StringIO
继承自。
换句话说,open(writer_file)
是不必要的,或者更确切地说,它会导致类型错误(正如您已经观察到的)。