使用python中的open()读取内存中的csv文件



我有一个数据框架。我想把这个数据帧从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)是不必要的,或者更确切地说,它会导致类型错误(正如您已经观察到的)。

相关内容

  • 没有找到相关文章

最新更新