如何将csv写入“变量”而不是文件?

时间:2020-01-08 15:11:22

标签: python pandas csv

我不确定如何准确地表达我的问题,而且我看到了一些相似问题,但并非完全是我想做的事情。如果已经有解决方案,请指导我。

这就是我想要做的:

在我的工作中,我们已经构建了一些pkg以处理各种数据类型。我正在使用的一种方法是将csv文件读入std_io对象(std_io是我们的通用对象类,可以读取任何类型的数据文件)。

我试图将其连接到我正在编写的另一个pkg,所以我可以在新的pkg中创建一个对象,然后将其隐接到std_io对象上。

问题在于,std_io对象用于读取实际文件,而不是接收对象。为了解决这个问题,我基本上可以将数据写入temp.csv文件,然后将其读取到std_io对象中。

我想知道是否有一种方法可以消除编写temp.csv文件的步骤。

这是我的代码:

x #my object
df = x.to_df() #object class method to convert to a pandas dataframe
df.to_csv('temp.csv') #write data to a csv file
std_io_obj = std_read('temp.csv') #read csv file into a std_io object

有没有一种方法可以将传递csv文件的输出结果直接传递到std_read中?这有道理吗?

我要这样做的唯一原因是避免必须将附加功能编码到任一pkg中以直接接受对象作为输入。

希望这很清楚,并感谢任何贡献者。

1 个答案:

答案 0 :(得分:0)

对于那些有兴趣或可能有相同问题/目的的人,这是我为解决此问题所做的事情。

我基本上只是创建了一个临时的命名文件,将.csv文件名链接到该临时文件,然后将其传递到我的std_read函数中,该函数需要csv文件名作为输入。

这从根本上欺骗了函数,使它认为它是以真实文件的名称作为输入,它只是照常打开它并使用csvreader对其进行解析。

这是代码:

import tempfile
import os

x #my object I want to convert to a  std_io object
text = x.to_df().to_csv() #object class method to convert to a pandas dataframe then generate the 'text' of a csv file

filename = 'temp.csv'

with tempfile.NamedTemporaryFile(dir = os.path.dirname('.')) as f:
    f.write(text.encode())
    os.link(f.name, filename)

stdio_obj = std_read(filename)
os.unlink(filename)
del f

仅供参考-std_read函数实际上只是按照通常的方式打开文件,然后将其传递给csvreader:

with open(filename, 'r') as f:
    rdr = csv.reader(f)
相关问题