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

Read in-memory csv file with open() in python

我有一个数据框。我想将此数据帧从 excel 文件写入 csv,而不将其保存到磁盘。看起来 StringIO() 是明确的解决方案。然后我想用 open() 从内存中打开类似对象的文件,但出现类型错误。如何解决此类型错误并使用 open() 读取内存中的 csv 文件?或者,实际上,假设 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 格式写入内存文件。

之后

writer_file = io.StringIO()

writer_file 已经是一个 file-like 对象。它已经有一个readline方法,还有readwriteseek等。参见io.TextIOBaseio.StringIO继承自。

换句话说,open(writer_file) 是不必要的,或者更确切地说,它会导致类型错误(正如您已经观察到的那样)。